【问题标题】:How to separate view model from elements defined in xaml如何将视图模型与 xaml 中定义的元素分开
【发布时间】:2017-04-27 00:18:47
【问题描述】:

我有一个需要调用 CommitEdit() 的 Telerik RadGridView。目前我正在使用视图模型中的以下代码调用它。

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

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

【问题讨论】:

    标签: c# wpf unit-testing mvvm telerik


    【解决方案1】:

    为了将“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。

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2014-10-09
      • 1970-01-01
      • 2020-01-29
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多