Tôi có một AddClientViewModel được tham chiếu bởi 2 khung nhìn (AddClientView và SuggestedAddressesView). AddClientView là một biểu mẫu có một trường cho một địa chỉ. Biểu mẫu có nút xác thực hợp lệ địa chỉ đã nhập bằng Mã hóa địa lý. Nếu có nhiều hơn một địa chỉ được trả về, khung nhìn SuggestedAddressesView sẽ mở ra.Mở/Đóng Xem từ ViewModel
Dưới đây là làm thế nào tôi hiện đang làm việc đó:
AddClientViewModel:
private void ValidateExecute(object obj)
{
SuggestedAddresses = new ObservableCollection<DBHelper.GeocodeService.GeocodeResult>(GeoCodeTest.SuggestedAddress(FormattedAddress));
....
if (SuggestedAddresses.Count > 0)
{
var window = new SuggestedAddressesView(this);
window.DataContext = this;
window.Show();
}
}
Dưới đây là các nhà xây dựng SuggestedAddressesView nơi AddClientViewModel thừa hưởng từ ViewModelBase
public SuggestedAddressesView(ViewModelBase viewModel)
{
InitializeComponent();
viewModel.ClosingRequest += (sender, e) => this.Close();
}
Vấn đề khác mà tôi đang gặp là khi tôi gọi OnClosingRequest() từ AddClientViewModel ... cả AddClientView và SuggestedAddressesView sẽ đóng lại. Tôi biết điều này xảy ra vì cả hai lượt xem đều tham chiếu cùng ViewModel. Đây không phải là hành vi tôi muốn. Tôi muốn có thể đóng một cửa sổ độc lập.
Đang mở Chế độ xem từ cấu trúc MVVM phù hợp ViewModel và làm cách nào để tôi có thể đóng cửa sổ một cách độc lập?
Được rồi, điều đó có ý nghĩa! Vấn đề tôi gặp phải là tôi muốn thông tin được thu thập từ ** SuggestedAddressesView ** sẽ được chuyển đến ** AddClientViewModel ** (vì vậy tại sao tôi sử dụng 1 VM cho 2 Chế độ xem). Lý do tôi làm điều này là vì Địa chỉ được chọn trong ** SuggestedAddressesView ** được gán cho một Khách hàng được định nghĩa trong ** AddClientViewModel **. – francisg3
@ francisg3 xem liên kết ví dụ tôi đã đăng. Nếu bạn nhận được ví dụ ở đó, 'Cửa sổ' thứ hai đã mở thông tin chuyển tiếp Modal/Non-Modal trở lại MainWindow. Đây là quá trình bạn sẽ sử dụng cho yêu cầu của bạn. Bạn sẽ sử dụng khá nhiều Messenger để gửi tin nhắn (ở đây thông báo sẽ là dữ liệu bạn muốn gửi từ SuggestedAddressViewModel tới AddClientViewModel) – Viv