0

我有一个 WPF 应用程序,我试图尽可能地接近 MVVM。我有一个类TitlesModel : MappedViewModelCollection<TitleEditModel, Title>MappedViewModelCollection其中有一个属性public ObservableCollection<TViewModel> Items { get; set; },它绑定到一个 DevExpress GridControl。控件中的每一行都有一个编辑删除按钮。当按下此按钮时,我想将TitleEditModel网格中的该行绑定到一个弹出模式窗口的视图。

我是“告诉”主视图模型,让它实例化、绑定并显示一个弹出窗口,还是仅仅实例化一个弹出窗口,将行传递EditViewModel给它并让它自己做事?

像这样的网格/详细视图场景的传统模式是什么?

4

1 回答 1

0

我们公司最近出现了这个问题,这也是 MVVM 的界限变得非常模糊的问题。我还没有看到一个明确的说法。

在您提到的选项中,第二个似乎更多 MVVM,但是您的 ViewModel 会感知 UI,如果我是您,我会避免这种情况。始终尝试保持单向感知链(View 知道 ViewModel 知道 Model

为了解决这个问题,我们引入了Interaction接口并通过依赖注入生成了实例。这使 ViewModel 100% 可测试,因为您可以在测试场景中用纯代码替换编辑器。

例子:

public interface IEditor
{ 
    void Edit(object input);
}

public class EditorView : IEditor
{
    public void Edit(object input)
    {
        // open modal window, set DataContext
    }
}

public class EditorStub : IEditor
{
    public void Edit(object input)
    {
        // alter the properties of input that you want to simulate user interaction on
    }
}
于 2013-10-31T07:59:31.153 回答