2009-06-08 16 views
11

Tôi đang cố gắng để hiểu được cách tiếp cận thiết kế MVVM cơ bản khi sử dụng ItemsControl bằng cách gắn nó qua DataTemplates để ObservableCollections trên ViewModel.ViewModel của tôi có thể xem ObservableCollection của Chế độ xem hoặc Chế độ xem không?

Tôi đã nhìn thấy những ví dụ mà liên kết với ObservableCollections của chuỗi, LầnViewModels.

Binding thành các chuỗi có vẻ là chỉ dành cho demo, đó là ràng buộc để "ViewModels có chứa bộ sưu tập xem có chứa bộ sưu tập của ViewModels" rằng sức mạnh của WPF dường như thực sự đi ra.

Đối với những người sử dụng thành thạo trong mẫu MVVM, cách tiếp cận tiêu chuẩn của bạn để ràng buộc ItemsControl, ListView, ListBox thành bộ sưu tập trong ViewModel là gì? Tôi đang tìm lời khuyên từ kinh nghiệm như thế này:

  • luôn luôn sử dụng ObservableCollection < ...> và không bao giờ Danh sách < ...> vì ...
  • một cái gì đó tốt hơn so với ItemsControl để hiển thị một bộ sưu tập là ...
  • để được lọc để làm việc trong ViewModel của bạn thay vì mã phía sau, sử dụng ...
  • bộ sưu tập sử dụng Chế độ xem khi ... và các bộ sưu tập của ViewModels khi ...
  • 90% thời gian tôi tạo một ItemsControl và liên kết nó với một O bservableCollection của Chế độ xem có Chế độ xem riêng của chúng ...

Trả lời

10

Tôi sẽ sử dụng một ObservableCollection của ViewModels vì những lý do sau đây:

  • ObservableCollection đã có các sự kiện có sẵn cho hệ thống báo khi nó đã được sửa đổi (ví dụ khi ghi được thêm/gỡ bỏ từ bộ sưu tập).
  • Chúng tôi đang ở lớp 'ViewModel' nên nó cung cấp sự tách biệt rõ ràng hơn để ViewModel chứa bộ sưu tập ViewModels thay vì Views
  • Nếu cần sửa đổi hoặc lấy dữ liệu từ các mục trong bộ sưu tập, bạn có thể dễ dàng hơn sửa đổi/truy cập dữ liệu đó nếu các mục là ViewModels (nếu chúng là các khung nhìn bạn thường xuyên sẽ truyền DataContext của View hoặc truy cập các phần tử giao diện người dùng của nó).
+0

hữu ích, cảm ơn –

+0

+1, đây chắc chắn là con đường để đi. viewmodel của bạn có các bộ sưu tập các khung nhìn và bộ sưu tập tài nguyên của khung nhìn của bạn có các bảng dữ liệu cho mỗi khung nhìn đó. –

1

Tôi thích sử dụng ObservableCollection of ViewModels. Khung nhìn liên kết với bộ sưu tập có thể định nghĩa một DataTemplate cung cấp cho ViewModel cái nhìn của nó. Điều này dẫn đến ít khớp nối giữa các thành phần.

+0

Nếu bạn có một ObservableCollection của ViewModels (thay vì Views), thì sự khác nhau giữa việc có XAML đó trong DataTemplate của bạn là gì và có XAML tệp .xaml của một dạng xem? –

1

Tôi có cùng một câu hỏi, nhưng thay thế "chế độ xem" bằng "mô hình". :)

Tôi có MODEL với một bộ sưu tập các mô hình khác. Tôi muốn chế độ xem của mình có bộ sưu tập các loại chế độ xem khác có thể quan sát được, nhưng khi tôi khởi tạo chế độ xem đó - kết nối giữa nội dung bộ sưu tập mô hình bị mất. Bây giờ tôi có cần bắt đầu đấu dây tất cả các sự kiện từ bộ sưu tập có thể quan sát được về bộ sưu tập mô hình không?

+1

Có, sự kiện là cách tốt nhất để làm điều đó. Cân nhắc sử dụng mẫu sự kiện yếu cho an toàn. – Gusdor