如何在MVVM中选择要编辑的项目以及显示和编辑弹出窗口?

时间:2013-10-31 04:39:13

标签: c# wpf mvvm

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

我是否'告诉'主视图模型,并让它实例化,绑定和显示弹出窗口,或者只是实例化一个弹出窗口,将行EditViewModel传递给它并让它自己做它?

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

1 个答案:

答案 0 :(得分:0)

这个问题最近出现在我们公司,并且它是MVVM线变得非常模糊的问题。我还没有看到一个明确的陈述。

在你提到的选项中,第二个似乎是更多的MVVM ,但你的ViewModel会变成UI感知,如果我是你,我会避免这种情况。始终尝试保持单向意识链(查看 知道 ViewModel 知道 模型

为了解决这个问题,我们引入了Interaction接口并通过Dependecy Injection生成了实例。这使得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
    }
}