2011-02-03 33 views
19

Tôi có một Xem trong đó có 2 quan điểm phụ vào nó và một ViewModel được gán cho mỗi view:WPF MVVM: ViewModels giao tiếp với nhau như thế nào?

ViewA - ViewModelA 
{ 
    ViewB - ViewModelB 
    ViewC - ViewModelC 
} 

ViewB có một hộp văn bản và ViewC có một combobox, cả hai mà tôi cần truy cập từ ViewModelA. Không phải là giao diện điều khiển chính nó, nhưng giá trị bị ràng buộc tức là. Văn bản của hộp văn bản và .SelectedItem của ComboBox. Hiện tại tôi chỉ có ViewModelB và ViewModelC là thuộc tính trên ViewModelA nhưng nó cảm thấy sai.

Cách tiêu chuẩn để xem các mô hình giao tiếp với nhau mà không phá vỡ mẫu MVVM là gì? Tôi hoàn toàn mới với WPF/MVVM.

+2

* ViewModelB có một hộp văn bản và ViewModelC có hộp tổ hợp * ... Nếu tôi thực hiện điều này theo nghĩa đen, bạn đã phá vỡ mẫu MVVM. ViewModels không tham chiếu đến các điều khiển WPF, chúng trưng ra các thuộc tính được * bound * tới Dependency Properties của các điều khiển * trong khung nhìn *. Các máy ảo có thể phơi bày các thuộc tính vì lợi ích của các khung nhìn bị ràng buộc với chúng, nhưng chúng vẫn không biết gì về bản chất (hoặc sự tồn tại) của các khung nhìn đó. –

+1

Rất tiếc tôi muốn nói ViewB có một hộp văn bản và ViewC có một hộp kết hợp, tôi sẽ sửa nó. – Dev1

Trả lời

11

Một cách để ngắt kết nối ViewModels giao tiếp với nhau là sử dụng cơ chế xuất bản/đăng ký chẳng hạn như PRISM s EventAggregator. Tuy nhiên, trong một mối quan hệ ViewModel cha/con, tôi nghĩ rằng đó là tốt cho phụ huynh có kiến ​​thức trực tiếp và kiểm soát đối với ViewModel con.

Cá nhân, tôi không nghĩ rằng việc tạo một ViewModel ra khỏi các Chế độ xem khác là một thực tiễn không tốt. Tôi làm nó suốt. I generally favor composition over inheritance trong Chế độ xem của tôi.

+0

* Tôi thường ưu tiên thành phần trên thừa kế trong ViewModels của tôi * - chúng là hai thứ khác nhau và một VM có thể sử dụng cả hai. – slugster

+0

@slugster - Yup, tôi sử dụng cả hai. Ví dụ: Tôi thường đặt rất nhiều mối quan tâm về cơ sở hạ tầng trong ViewModel cơ sở (INotifyPropertyChanged, v.v ...). –

+0

@slug Tôi muốn nói rằng thừa kế cho chức năng và bố cục để biết thông tin. – LuckyLikey

3

Chế độ xem thường là 'kế thừa' các mối quan hệ từ Mô hình. Và nó không sai khi thêm một mối quan hệ khi nó có ý nghĩa.

Hoàn toàn OK cho một ViewModel để có thuộc tính tham chiếu đến một ViewModel khác.

Các vấn đề liên quan