从使用MVVM模式创建的WPF对话框中获取值的最佳方法是什么。我当前的代码涉及获取ViewModel并从中获取适当变量的额外步骤。我想避免这一步,因为它似乎有些无关紧要。
private void OpenDataSeriesWindow()
{
var addVehicle = new AddResultsSeries();
addVehicle.ShowDialog();
AddResultsSeriesViewModel tempViewModel = (AddResultsSeriesViewModel)addVehicle.DataContext;
PlotVariables.Add(tempViewModel.NewSelectedVariable);
}
答案 0 :(得分:7)
我通常这样做:
想要显示对话框的ViewModel为特定对话框构造CustomDialogViewModel。它还可以使用初始参数设置ViewModel。
View提供了显示对话框的界面。例如,如果我有一个CustomViewModel,CustomWindow将实现ICustomView,它被注入到CustomViewModel的构造函数中。 ICustomView将提供方法ShowCustomDialog(CustomDialogViewModel dialogViewModel)
。
ViewModel在View界面上调用ShowDialog方法。当调用返回时,它可以使用DialogViewModel上的属性来查看结果。
这使得ViewModel与特定的View实现很好地分离,并允许您在单元测试时注入模拟IView。这允许您编写测试,以检测已使用预期参数打开对话框并相应地提供结果。