如何将视图模型与xaml中定义的元素分开

时间:2017-04-27 00:18:48

标签: c# wpf unit-testing mvvm telerik

我有一个Telerik RadGridView,我需要调用CommitEdit()。目前我使用viewmodel中的以下代码调用它。

  ((MainWindow)Application.Current.MainWindow).Container.View.RadGrid.CommitEdit();

但我发现这使我无法对viewmodel进行单元测试。如何在这种情况下将viewmodel与视图分开?

1 个答案:

答案 0 :(得分:0)

为了将“UI”特定功能与ViewModel分离,您可以执行的操作是向ViewModel添加一个事件,您可以在需要提交编辑时调用该事件。类似的东西:

public ViewModel : IViewModel
{
    public event Action CommitEdit;
}

然后,在您的代码中,订阅该事件:

private void OnWindowLoaded(object sender, RoutedEventArgs e)
{
    var dataContext = DataContext as IViewModel;
    if (dataContext != null)
    {
        dataContext.CommitEdit += (()=>{ Container.View.RadGrid.CommitEdit(); })
    }
}

现在,当您进行单元测试时,您可以直接对ViewModel进行单元测试,而不依赖于您的RadGrid。这将允许测试是否调用事件Action。