Tôi vừa bắt đầu thử nghiệm với số MVVM Light Toolkit của Laurent Bugnion. Tôi nghĩ rằng tôi sẽ thực sự thích nó, nhưng tôi có một vài câu hỏi.Bộ công cụ ánh sáng MVVM - RelayCommands, DelegateCommands và ObservableObjects
Trước khi tôi đến với họ, hãy để tôi giải thích tôi đến từ đâu. Tôi hiện đang sử dụng kết hợp của MVVM Foundation của Josh Smith và một dự án khác trên Codeplex có tên là MVVM Toolkit. Tôi sử dụng ObservableObject
và Messenger
từ MVVM Foundation và DelegateCommand
và CommandReference
từ Bộ công cụ MVVM.
duy nhất chồng chéo thực sự giữa MVVM Foundation và MVVM Toolkit là họ đều có một thực hiện cho ICommand
: MVVM Foundation có RelayCommand
và MVVM Toolkit có DelegateCommand
. Trong số này, DelegateCommand
dường như tinh vi hơn. Nó sử dụng một CommandManagerHelper
sử dụng tham chiếu yếu để tránh rò rỉ bộ nhớ.
Với những gì đã nói, đây là những câu hỏi của tôi:
Tại sao MVVM Ánh sáng sử dụng
RelayCommand
hơnDelegateCommand
? Việc sử dụng tài liệu tham khảo yếu trong một sốICommand
không cần thiết hay không được khuyến cáo vì một số lý do?Tại sao không có
ObservableObject
trong MVVM Light?ObservableObject
về cơ bản chỉ là một phần củaViewModelBase
thực hiệnINotifyPropertyChanged
, nhưng rất thuận tiện để có một lớp riêng biệt vì các kiểu xem không phải là các đối tượng duy nhất cần triển khaiINotifyPropertyChanged
. Ví dụ: giả sử bạn có DataGrid liên kết với danh sách các đối tượngPerson
. Nếu bất kỳ thuộc tính nào trongPerson
có thể thay đổi trong khi người dùng đang xem DataGrid,Person
cần phải triển khaiINotifyPropertyChanged
. (Tôi nhận ra rằng nếuPerson
được tạo tự động bằng cách sử dụng một cái gì đó giống như LinqToSql, có thể nó đã thực hiệnINotifyPropertyChanged
, nhưng có trường hợp tôi cần phải tạo phiên bản cụ thể cho các đối tượng mô hình thực thể, vì tôi cần bao gồm một lệnh hỗ trợ cột nút trong DataGrid.)
Cảm ơn.
P.S. Dưới đây là mã cho DelegateCommand
từ MVVM Toolkit:
https://docs.google.com/document/pub?id=1ApCx5SbCfHi5fBhv8Ki3zA6j34sp2t80LQZdj89v8cU
'ObservableObject' cũng đã được triển khai. – devuxer