Hoặc tôi không thấy giải pháp hoặc tôi đã tìm thấy sự cố khi sử dụng MVVM.Lỗ hổng MVVM sử dụng kịch bản Chi tiết chính
Tôi có mẫu này Master-Chi tiết:
class Customer
{
int CustomerID {get;set}
string Name {get;set}
ObservableCollection<Order> Orders {get;set}
}
class Order
{
int OrderID {get;set}
int Quantity {get;set}
double Discount {get;set}
}
Cho phép giả định trong CustomerOrdersViewModel ObservableCollection Khách hàng của tôi của tôi là ràng buộc với Xem qua ... = "{Binding khách hàng}" và khi khách hàng được thay đổi từ người sử dụng các đơn đặt hàng liên quan được hiển thị trong DataGrid thông qua ItemsSource = "{Binding SelectedItem.Orders, ElementName = comboboxCustomer}".
này có thể với MVVM:
tôi có thể thêm một khách hàng mới bằng cách đơn giản (để đơn giản) gọi Customers.Add(new Customer(){...});
.
Sau khi thêm tôi làm điều này: this.RaisePropertyChanged("Customers");
. Thao tác này sẽ cập nhật chế độ xem và hiển thị ngay lập tức Khách hàng trong Hộp chứa khách hàng.
Bây giờ đến phần không thể với MVVM.
tôi có thể thêm một thứ tự mới bằng cách SelectedCustomer.Orders.Add(New Order(){...});
NHƯNG tôi không thể nâng cao một sự kiện CollectionChanged/PropertyChanged như trước đây với Khách hàng bây giờ trên đơn đặt hàng vì Orders tài sản không bị ràng buộc vào Xem qua accessor công cộng .
Thậm chí nếu tôi sẽ phơi bày Orders tài sản bindable đến quan điểm, quan điểm riêng của mình chăm sóc cho Master-Detail chuyển đổi không phải là ViewModel ...
HỎI
Làm thế nào là nó có thể làm cho tổng thể -Detail Làm việc với các đối tượng Add/Del trong Details-List và cập nhật ngay trên View?
Tôi đã kiểm tra mã của bạn và phải nói rằng nó làm cho quá phức tạp. WPF là tốt đẹp. MVVM làm cho mọi thứ trở nên phức tạp quá dễ dàng trong WinForms. Entity Framework là không thể với MVVM một trò đùa nếu bạn hỏi tôi. Hãy thử làm cho một Eager Loading với MVVM sau đó bạn biết những gì tôi có ý nghĩa. Mọi LOB đều có nhiều chi tiết chính. Bây giờ tôi biết tại sao mỗi mẫu MVVM ra có một bản demo ngu ngốc và đồng bộ Hiển thị tất cả danh sách khách hàng ... Nếu bạn biết về một mẫu MVVM Master-Detail khác, tôi sẽ đánh giá cao liên kết :) Vì những người quan tâm đến vấn đề đó: http://www.codeproject.com/KB/WPF/WpfNhibernateToolkit.aspx – msfanboy
Thỏa thuận MVVM rất nhiều với quan hệ giữa View và ViewModel nhưng về VM quan hệ với Model hoàn toàn thầm lặng đoán tại sao? Bạn lấy Dữ liệu từ DAL của bạn và đọc các khách hàng, đơn đặt hàng, sản phẩm có liên quan trong 3 ObservableCollection? Đây là một nỗ lực lớn tạo ra loại bối cảnh entityViewModel ... dường như quá nhiều devs chơi với VS2010 wpf RAD công cụ thiết kế để nhận ra các ứng dụng LOB thực cần nhiều hơn nữa ... –
msfanboy
Ahh - nhưng tôi không đồng ý ở đây. Có, mã phức tạp, nhưng nó hoàn toàn có thể tái sử dụng được. Sử dụng nó chỉ là kéo một hành vi vào danh sách chủ của bạn, và nó "chỉ hoạt động". –