2013-06-17 41 views
8

Tôi mới trong MVVM và tôi đang phát triển một ứng dụng. Tôi có một hình thức xem với rất nhiều tài sản. Khoảng 50. Tôi không thể tách riêng chúng thành usercontrol vì tôi sẽ phá vỡ nguyên tắc mvvm.MVVM ViewModel rất nhiều thuộc tính

Tôi không thể tách riêng chúng thành mô hình, vì chúng chứa logic. PropertyChange, lỗi thay đổi và đây sẽ không phải là các lớp poco, và đây không phải là mô hình.

Nó có đẹp không Nếu tôi giữ 60 tài sản trong cùng một viewmodel?

Tôi nghĩ có sai không? Bạn sẽ tổ chức những điều này như thế nào?

+4

Tại sao bạn không thể tạo 'UserControl' mà không phá vỡ MVVM? – Viv

+2

Một câu hỏi hay của Viv. Bạn có thể tạo ViewModels cho các điều khiển người dùng trong ViewModel chính của mình. Ngoài ra, bạn có thể sử dụng một số loại "Controller" lớp cho logic và giữ ViewModel sạch chỉ với thực hiện PropertyChanged. Cách khôn ngoan nhất là: tạo cơ chế viewmodel và lấy được từ nó. –

+0

Tôi biết tôi không thể sử dụng UserController vì http://stackoverflow.com/questions/17048066/mvvm-light-test-viewmodel-with-view-and-create-staticresource-locator – user1693057

Trả lời

1

Vui lòng không sử dụng PropertyChanged cho 60 Properties. Sử dụng DependencyProperty. Để biết các điều khoản sử dụng, hãy sử dụng phím tắt propdp từ Visual Studio và nhấn Tab hai lần.

Vui lòng tham khảo liên kết này: http://www.codeproject.com/Articles/62158/DependencyProperties-or-INotifyPropertyChanged

+2

Vâng, kể từ khi tác giả của articel chỉ ra một số điểm, khi nó được khuyến khích để thực hiện 'INotifyPropertyChanged' (ví dụ như thử nghiệm), bạn không nên recomment bằng cách sử dụng' DependencyProperty' mà không đưa ra một gợi ý, rằng có một số hạn chế. – DHN

+0

Kể từ khi tôi đăng liên kết đến bài viết này, tác giả của câu hỏi này có thể đọc kỹ thông qua nó :) Nhưng tất nhiên bạn nói đúng, tốt hơn là nên để anh ta cân nhắc thay vì chỉ khuyên bạn sử dụng 'DependencyProperty' –

+0

I ' m xin lỗi, tôi không đồng ý. * Vui lòng không sử dụng PropertyChanged cho 60 Thuộc tính.Sử dụng DependencyProperty. [...] * ngụ ý rằng không có bất lợi. Tôi biết tôi và tôi biết các nhà phát triển khác ... chúng tôi ghét bức tường văn bản, vì vậy anh ấy có thể bỏ lỡ những bất lợi. – DHN

2

Tôi không thể tách chúng thành usercontrol vì tôi sẽ phá vỡ các nguyên tắc MVVM.

Tôi không chắc chắn ý của bạn là gì. Về cơ bản bạn sẽ muốn sử dụng chế độ xem và chia nhỏ mô hình xem và chế độ xem thành các phần liên tục.

Chế độ xem là một WPF UserControl (hoặc Window), vì vậy nếu bạn đang sử dụng MVVM thì bạn đang sử dụng UserControl 's, nó chỉ là khái niệm chúng được coi là lượt xem trong mẫu.

Tôi cũng khuyên bạn nên use an MVVM framework if you're using the MVVM pattern và một cái gì đó như Caliburn.Micro giúp chế độ xem cực kỳ dễ dàng.

Tôi cũng không khuyên bạn nên sử dụng thuộc tính phụ thuộc cho các kiểu xem, use INotifyPropertyChanged instead.

Hầu hết các khung MVVM cung cấp loại mô hình chế độ xem cơ sở bao gồm phương thức dựa trên lambda để gọi sự kiện PropertyChanged, do đó trợ giúp tái cấu trúc.

+0

Tôi mới, nhưng tôi đọc tôi có thể sử dụng usercontrol chỉ với các thuộc tính phụ thuộc, bởi vì tất cả các tài sản nên được trong mô hình xem và usercontrol sẽ hiển thị nó bằng thuộc tính phụ thuộc.Vì vậy, nếu tôi sử dụng usercontrol, các thuộc tính dep vẫn nằm trong mô hình view, chỉ có nhiều dòng hơn là – user1693057

+0

Các khung nhìn của bạn sẽ là UserControls khai báo XAML và sẽ khởi tạo các điều khiển như một TextBlock sẽ có các thuộc tính phụ thuộc như thuộc tính Text của nó. của các ràng buộc cần phải là một thuộc tính phụ thuộc, nhưng không phải là nguồn.Vì vậy, mô hình khung nhìn của bạn sẽ thực hiện INPC và ràng buộc sẽ vẫn hoạt động như thuộc tính target TextBlock là thuộc tính phụ thuộc. – devdigital

+0

ok, nhưng trong trường hợp này các thuộc tính trong chế độ xem chính sẽ không được tách riêng. thế nào tôi có thể tạo một viewmodel mà không cần xem, và sử dụng nó trong viewmodel chủ? – user1693057

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