2012-04-10 26 views
7

Tôi đã tò mò điều tốt nhất để làm với ViewModels là gì. Có tốt hơn không khi triển khai giao diện INotifyPropertyChanged hoặc để lấy được từ ObservableObject.ObservableObject hoặc INotifyPropertyThay đổi trên Chế độ xemMô hình

ObservableObject thực hiện lớp học INotifyPropertyChanged và thực hiện một số mã nhàm chán như RaisePropertyChanged.

INotifyPropertyChanged yêu cầu triển khai sự kiện PropertyChanged.

Từ quan điểm của tôi, có vẻ logic hơn khi sử dụng ObservableObject, nhưng trong hầu hết các hướng dẫn, chúng triển khai giao diện INotifyPropertyChanged trên ViewModel.

Bạn có nghĩ rằng đó là vì sự đơn giản hoặc có lý do hợp lý không?

Trả lời

14

ObservableObject là một phần của Microsoft.Practices.Composite.Presentation - nghĩa là Prism. Nó cũng được triển khai trong MVVM LightMVVM Foundation.

INotifyPropertyChanged là một phần của System.ComponentModel - tức là nó nằm trong thư viện lõi.

Vì vậy, nếu bạn chưa bao gồm Prism hoặc một trong các khung công tác khác, tôi muốn gắn bó với INotifyPropertyChanged. Dường như có ít điểm trong việc đưa nó vào một lớp học.

+1

Một ObserveableObject cũng được thực hiện, tôi tin rằng, trong MVVM Light. – Robaticus

+2

Hoặc http://mvvmfoundation.codeplex.com/? – Gabe

+0

Thật vậy. Tôi đã xem xét một số dự án đã được thực hiện bằng cách sử dụng MVVM Light (chỉnh sửa tôi bối rối các khuôn khổ). Vì vậy, trong trường hợp của tôi, tôi có thể sẽ muốn sử dụng nó. Cảm ơn. – Xavier

0

Nói chung, với tất cả những người khác bằng nhau, tôi khuyên bạn nên đi với một cách tiếp cận nơi bạn triển khai giao diện so với xuất phát từ các lớp tổ tiên. Bạn có thể triển khai bao nhiêu giao diện tùy thích, nhưng bạn chỉ nhận được một phụ huynh, vì vậy tôi thích sử dụng phụ huynh "khôn ngoan hơn". Trong trường hợp tôi có thể có được những gì tôi muốn thực hiện một giao diện, tôi thích để lại các tùy chọn của tôi mở cho kế thừa sau này.

+1

Với một cái gì đó như ObservableObject, nếu bạn kế thừa từ này, và sau đó cần phải kế thừa từ một lớp khác, bạn có thể đảm bảo các lớp cha mới kế thừa từ ObservableObject. –

1

Tôi muốn nói rằng nếu bạn đang triển khai rất nhiều ViewModels, có rất nhiều mã ống nước cần thiết để triển khai INotifyPropertyChanged, và bạn nên thực hiện tốt hơn việc tạo lớp cơ sở ViewModel của riêng mình hoặc sử dụng một trong những cái được cung cấp cho bạn bởi một khung MVVM (MVVM Light là khung làm việc của tôi).

Nếu không, bạn thực sự không phải là rất "DRY" (Đừng lặp lại chính mình).

Edit - Accidently một ý nghĩ

Hãy ghi nhớ rằng ObservableObject thường chỉ là một việc thực hiện trọng lượng nhẹ hơn trong những điều cơ bản giống nhau một lớp ViewModel sẽ, đem lại cho bạn INPC, nhưng để lại một số trong những điều khác mà bạn có thể sử dụng trong một ViewModel đầy đủ.

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