【问题标题】:How should selecting an item for edit and showing and edit popup be done in MVVM?应该如何在 MVVM 中选择要编辑的项目并显示和编辑弹出窗口?
【发布时间】:2013-10-31 04:39:12
【问题描述】:

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

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

这样的网格/细节视图场景的常规模式是什么?

【问题讨论】:

标签: c# wpf mvvm


【解决方案1】:

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

在您提到的选项中,第二个似乎更多 MVVM,但您的 ViewModel 会感知 UI,如果我是您,我会避免使用。始终尝试保持单向的认知链(View knows ViewModel knows 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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多