Tôi có một ứng dụng cần mở hộp thoại từ nút mà người dùng nhập một số thông tin.Mở hộp thoại trong WPF MVVM
Tại thời điểm tôi làm điều đó như thế này (trong đó hoạt động tốt)
- Nút nhấp chuột tạo ra một lệnh trong ViewModel.
- ViewModel tăng sự kiện mà Trình điều khiển lắng nghe.
- Controller hoạt động ra các chi tiết của cửa sổ mới (ví dụ View, ViewModel & mô hình) và mở nó (ShowDialog)
- Khi cửa sổ bị đóng Controller thêm kết quả cho EventArgs và trả về cho ViewModel
- ViewModel chuyển thông tin đến Model.
Có rất nhiều bước nhưng tất cả đều có ý nghĩa và không có nhiều cách nhập.
Mã này trông như thế này (cửa sổ yêu cầu tên người dùng)
ViewModel:
AskUserNameCommand = DelegateCommand(AskUserNameExecute);
...
public event EventHandler<AskUserEventArgs> AskUserName;
void AskUserNameExecute(object arg) {
var e = new AskUserNameEventArgs();
AskUserName(this, e);
mModel.SetUserName(e.UserName);
}
Bộ điều khiển:
mViewModel.AskUserName += (sender,e) => {
var view = container.Resolve<IAskUserNameView>();
var model = container.Resolve<IAskUserNameModel>();
var viewmodel = container.Resolve<IAskUserNameViewModel>(view, model);
if (dlg.ShowDialog() ?? false)
e.UserName = model.UserName;
}
Câu hỏi của tôi là cách giao tiếp ngang hoạt động trong Mẫu MVVM. Bằng cách nào đó, có vẻ như sai khi cho phép bộ điều khiển tham gia vào việc truyền dữ liệu giữa các mô hình.
Tôi đã xem xét mẫu hòa giải để cho phép các mô hình truyền thông trực tiếp. Không thích ý tưởng đó vì nó làm cho mô hình phụ thuộc vào các chi tiết thực hiện của GUI. (ví dụ: nếu hộp thoại được thay thế bằng hộp văn bản, mô hình cần phải thay đổi)
Bạn có có một cái nhìn tại các câu hỏi sau http: //stackoverflow.com/questions/454868/handling-dialogs-in-wpf-with-mvvm http://stackoverflow.com/questions/ 1667888/wpf-mvvm-dialog-example http: // stackoverflow.com/questions/1792814/using-mvvm-foundation-messenger-to-show-dialog – Guge
Có, tôi đã xem chúng nhưng tất cả chúng đều đề xuất một mẫu phát sóng để giải quyết một ví dụ nào đó. – adrianm
'Nút bấm tạo ra một lệnh trong ViewModel.', Điều này có nghĩa là gì? 'ViewModel đặt ra một sự kiện mà Bộ điều khiển lắng nghe', bộ điều khiển nào ?! –