Trong ví dụ khách hàng mà bạn cung cấp, CustomerModel chứa tất cả thông tin được lưu trữ bởi cơ sở dữ liệu của bạn (hoặc chương trình phụ trợ khác). CustomerViewModel chứa thông tin tương tự nếu nó sẽ được hiển thị trên UI (Tên vv, có khả năng 50 thuộc tính khác nếu bạn có một lớp lớn) nhưng khi sử dụng giao diện INotifyPropertyChanged để hiển thị chúng như các thuộc tính mà View (tức là XAML) có thể ràng buộc.
ví dụ:
public int Name
{
get
{
return this.name;
}
set
{
if (this.name!= value)
{
this.name= value;
this.OnPropertyChanged("Name");
}
}
}
ViewModel cũng chứa bit khác của nhà nước UI - cờ Tầm nhìn, Tab chỉ số hiện tại, bit phức tạp hơn của văn bản được tạo ra từ dữ liệu trong nhiều lĩnh vực, ObservableCollection < > các mặt hàng trẻ em, vv Tất cả đang có để bị ràng buộc với XAML.
Tôi đã thấy ViewModel được tạo từ Mô hình dưới dạng quy trình một chiều, một chiều, ví dụ: với một constructor:
CustomerViewModel viewModel = new CustomerViewModel(customer);
hoặc như là một phương pháp khuyến nông
CustomerViewModel viewModel = customer.ToViewModel();
Tôi chưa thấy bất kỳ điều khoản cho việc cập nhật một ViewModel để thay đổi mô hình - điểm của ViewModel là nó được phân lập từ ngươi mâu. Nó giữ một bản sao riêng của dữ liệu. Nó không tuyên truyền các thay đổi về mô hình, không phải cho đến khi bạn nhấn nút "lưu". Vì vậy, nếu bạn hủy thay vào đó, không có gì trong mô hình đã thay đổi và không có gì để hoàn tác.
Bạn có thể đang cố gắng hết sức để giữ cho ViewModel được cập nhật với Mô hình - hầu hết các trường hợp như lưu hoặc tải bạn chỉ có thể vứt bỏ ViewModel hiện tại và tạo một mô hình mới từ trạng thái hiện tại của mô hình. Bạn có cần giữ trạng thái UI của ViewModel và thay đổi dữ liệu trong đó không? Nó không phải là một yêu cầu phổ biến nhưng nó có thể được thực hiện với một phương pháp hoặc hai được gọi là khi lưu hoặc tải xảy ra.
Vì vậy, cũng có giả định rằng logic nối dây này xảy ra ở đâu đó. Đây là lý do tại sao hầu hết các mẫu có liên quan đến số lượt xem cũng liên quan đến bộ điều khiển chịu trách nhiệm về các lệnh (ví dụ: hiển thị khách hàng, lưu khách hàng) và thiết lập trạng thái giao diện người dùng mới sau đó.
Nếu bạn giữ ViewModel tách biệt với Mô hình, làm cách nào để áp dụng bất kỳ quy tắc nào trong Mô hình? Nói rằng tôi có một mô hình với số lượng và giá trị. Nếu tôi thay đổi số lượng trên ViewModel sẽ chảy qua mô hình cập nhật giá trị dựa trên số lượng mới. Bây giờ ViewModel sẽ hiển thị Giá trị mới. –
"Nếu tôi thay đổi số lượng trên ViewModel sẽ chuyển sang mô hình" không, không cho đến khi bạn nhấn nút Lưu hoặc tương tự. Khi bạn làm điều đó, trình xử lý cho điều đó sẽ cập nhật mô hình, duy trì nó và tạo ra một ViewModel mới ngoài trạng thái Model mới. – Anthony
Vì vậy, nếu nó không chảy qua Mô hình, thì ViewModel sẽ nhận được trường Giá trị được cập nhật như thế nào? Nếu tôi thay đổi Số lượng, với tư cách là người dùng tôi mong đợi sẽ thấy Giá trị mới. MV không có logic nghiệp vụ để tính toán Giá trị, chỉ có Mô hình thực hiện. –