请继续使用MVVM,并将其与Sivlerlight一起使用。我遇到了一个场景,我有一个包含一个DataGrid的Main UserControl,例如Employees。用户可以双击任何数据网格记录以显示EditEmployeeWindow(非阻止),以便用户可以同时编辑多个员工。我唯一的问题是(我们的一个要求)当用户在任何编辑,新窗口上单击保存时,数据必须直接保存到数据库,并且对于一个模型,保存操作将保存所有更改。
因此,我的解决方案之一是创建一个EditorViewModel,它拥有自己的Model(模型的新实例)并获取已编辑记录的id。在EditorViewModel中,我将新加载此单个记录,并将直接保存仅对该记录的更改。还要使用MVVM-Light Messenger向MainViewModel发送消息以刷新它的数据,因为它们将不再相同。
请你指导我!我是在正确的轨道上吗?
提前致谢
答案 0 :(得分:0)
看起来不错,但我强烈建议您在主视图模型中的某处存储编辑记录列表,以便不允许同一记录上的多个窗口。此外,由于您已经将使用messenger与主视图模型进行通信,因此主要时间为v.m.将收到它的子窗口关闭消息,向其他窗口发送消息,强制它们关闭,然后在主v.m上调用刷新方法。
确定所有窗口何时关闭(因为你的工作异步)实际上可能有点棘手,有很多方法可以做到这一点,但我建议您遵循:
1)跟踪主视图模型的状态(是否已打开窗口,等待所有窗口关闭等)
2)当窗口提交操作完成时,通知主要的v.m.并从活动记录列表中删除id。
3)当列表中没有剩余记录时,刷新数据。
最终当你需要添加更多与弹出窗口相关的逻辑时,我建议将弹出相关代码提取到类似PopupService的类,它应该是单例,但我强烈建议你通过其中一个获取它的实例IoC容器(Unity,MvvmLight one或事件MEF)。