我是MVVM的新手,并且遇到了如何打开对话框并随后在其自己的ViewModel C#文件中关闭对话框的问题。搜索可能的解决方案,但没有找到合适的解决方案。
我的解决方案如下所示,但是我不确定这是否有缺点。
定义了一个UserControl并使用以下命令打开它:
void ChangeDataPathExecute()
{
Window window = new Window
{
Content = new ChangeDataRootPathUserControl(),
};
window.ShowDialog();
}
在UserControl文件的ViewModel中实现:
private void DetermineMyWindow()
{
foreach (Window window in App.Current.Windows)
{
ChangeDataRootPathUserControl uc = window.Content as ChangeDataRootPathUserControl;
if (uc == null)
continue;
myWindow = window;
}
最后在Close方法中:
void OkChangeDataRootPathExecute()
{
DetermineMyWindow();
myWindow.Close();
}
你怎么看待这件事?哈克还是好的解决方案?
感谢您的反馈
打
最佳答案
MVVM场景中的ViewModel
不必了解有关View
的任何信息。在您的示例中,它似乎必须对 View 了解很多。
许多人使用许多不同的模式从ViewModel打开/关闭窗口。我更喜欢事件/回调:
class ViewModel {
public event EventHandler ChangeDataRootPath;
}
class View : Window {
public View() {
InitializeComponent();
var vm = new ViewModel();
vm.ChangeDataRootPath += (s, e) => {
Window window = new Window {
Content = new ChangeDataRootPathUserControl {
DataContext = vm
}
};
window.ShowDialog();
};
DataContext = vm;
}
}
关于c# - WPF UserControl MVVM如何关闭对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837170/