如何使用MVVM从WPF对话框中获取值

如何使用MVVM从WPF对话框中获取值,wpf,mvvm,modal-dialog,Wpf,Mvvm,Modal Dialog,从使用MVVM模式创建的WPF对话框中获取值的最佳方法是什么。我当前的代码涉及获取ViewModel并从中获取适当变量的额外步骤。我想避免这一步,因为这似乎有些无关 private void OpenDataSeriesWindow() { var addVehicle = new AddResultsSeries(); addVehicle.ShowDialog(); AddResultsSeriesViewModel tempViewModel = (AddResult

从使用MVVM模式创建的WPF对话框中获取值的最佳方法是什么。我当前的代码涉及获取ViewModel并从中获取适当变量的额外步骤。我想避免这一步,因为这似乎有些无关

private void OpenDataSeriesWindow()
{
   var addVehicle = new AddResultsSeries();

   addVehicle.ShowDialog();

   AddResultsSeriesViewModel tempViewModel = (AddResultsSeriesViewModel)addVehicle.DataContext;
   PlotVariables.Add(tempViewModel.NewSelectedVariable);
}

我通常是这样做的:

要显示对话框的ViewModel为特定对话框构造CustomDialogViewModel。它还可以使用初始参数设置ViewModel

视图提供了一个显示对话框的界面。例如,如果我有一个CustomViewModel,CustomWindow将实现ICustomView,它被注入到CustomViewModel的构造函数中。ICustomView将提供ShowCustomDialogCustomDialogViewModel dialogViewModel方法

ViewModel在视图界面上调用ShowDialog方法。当调用返回时,它可以使用DialogViewModel上的属性查看结果

这使ViewModel与特定的视图实现很好地解耦,并允许您在单元测试时插入模拟IView。这允许您编写测试,以检测对话框是否已使用预期参数打开,并相应地提供结果