0
今天我遇到了一些類似下面的代碼。 它非常簡單,希望你可以通讀錯誤。關閉多個模態視圖時確保正確返回
ViewHelper類,可以打開新的視圖。
public void DisplayView(ViewBase viewModel)
{
view = GetView(viewModel);
view.Owner = GetOwner(view);
view.ShowDialog(); //Will never return if view.Owner closes itself before view.
}
查看模型類,可以打開另一個對話框。
public class MyViewModel : ViewModelBase
{
private Action<int> _callback;
public int SelectedInt { get; set; }
public MyViewModel(Action<int> callback)
{
_callback = callback;
}
public void AcceptAndClose()
{
_callback.Invoke(SelectedInt);
Close();
}
public void Close()
{
// Closes corresponding View
}
public void NewDialog()
{
var callback = p =>
{
this.SelectedInt = p;
this.AcceptAndClose();
}
ViewHelper.DisplayView(new MyViewModel(callback));
}
}
,我發現它的問題是,如果我們在MyViewModel類打開與NewDialog一個新的對話框(),而新的視圖模型運行AcceptAndClose(),它永遠不會正確地關閉,因爲它的主人自行關閉通過回調之前,它做到了。
可以通過更改AcceptAndClose()函數來解決此問題,以便在調用回調之前關閉它自己。但它似乎很容易出錯。 避免這種情況發生的最佳做法是什麼?
同意。我寫了一篇關於[MVVM對話框](http://www.codeproject.com/Articles/820324/Implementing-Dialog-Boxes-in-MVVM)的文章,其中涵蓋了相當全面的關閉問題,同時仍然易於實現應用端。基本上,你需要一個行爲,進入關閉事件並相應地調用你的回調。 –