我有一个WPF应用程序,我试图保持尽可能接近MVVM。我有一个班级TitlesModel : MappedViewModelCollection<TitleEditModel, Title>
,其中MappedViewModelCollection
,其属性public ObservableCollection<TViewModel> Items { get; set; }
,绑定到DevExpress GridControl
。控件中的每一行都有一个编辑和删除按钮。按下此按钮时,我想将网格中该行的TitleEditModel
绑定到一个弹出的模态窗口视图。
我是否'告诉'主视图模型,并让它实例化,绑定和显示弹出窗口,或者只是实例化一个弹出窗口,将行EditViewModel
传递给它并让它自己做它?
像这样的网格/细节视图场景的传统模式是什么?
答案 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
}
}