2017-04-27 14 views
0

我有一個Telerik RadGridView,需要調用CommitEdit()。目前我使用viewmodel中的以下代碼調用它。如何將視圖模型與xaml中定義的元素分開

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

但我發現這可以防止我能夠單元測試視圖模型。在這種情況下,我怎樣才能將視圖模型從視圖中分離出來?

回答

0

爲了從ViewModel中分離出「UI」特定的功能,你可以做的是向你的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(); }) 
    } 
} 

現在,當你做單元測試,你可以只單元直接測試視圖模型,而不依賴於你的radgrid控件。這將允許測試以查看事件Action是否被調用。

相關問題