我有一個由2個視圖(AddClientView和SuggestedAddressesView)引用的AddClientViewModel。 AddClientView是一個具有地址字段的表單。該表單有一個驗證按鈕,可使用地理編碼驗證輸入的地址。如果返回多個地址,則會打開SuggestedAddressesView。從ViewModel打開/關閉視圖
這裏如何我目前做的是:
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();
}
}
這裏是SuggestedAddressesView構造,其中AddClientViewModel從ViewModelBase
繼承public SuggestedAddressesView(ViewModelBase viewModel)
{
InitializeComponent();
viewModel.ClosingRequest += (sender, e) => this.Close();
}
我遇到的另一個問題是當我從AddClientViewModel調用OnClosingRequest()時,AddClientView和SuggestedAddressesView都會關閉。我知道發生這種情況是因爲兩個視圖引用了相同的ViewModel。這不是我想要的行爲。我希望能夠獨立關閉任一窗口。
從ViewModel適當的MVVM結構打開一個視圖,我將如何去關閉獨立關閉窗口?
好吧,這很有道理! 我遇到的問題是,我想從** SuggestedAddressesView **收集的信息被傳遞給** AddClientViewModel **(因此爲什麼我使用2個視圖的虛擬機)。我這樣做的原因是因爲在** SuggestedAddressesView **中選擇的地址被分配給在** AddClientViewModel **中定義的客戶端。 – francisg3
@ francisg3看看我發佈的示例鏈接。如果你在那裏得到例子,打開的第二個「窗口」模式/非模態傳遞信息返回到MainWindow。這也是您將用於您的需求的過程。您幾乎可以使用Messenger發送消息(這裏的消息是您想要從SuggestedAddressViewModel發送到AddClientViewModel的數據) – Viv