【问题标题】:MVVM Multiple Edit WindowsMVVM 多编辑窗口
【发布时间】:2011-06-21 05:42:06
【问题描述】:

请您还是 MVVM 的新手,并且正在将它与 Sivlerlight 一起使用。我遇到了一个场景,我有一个包含一个 DataGrid 的 Main UserControl,例如,Employees。用户可以双击任何数据网格记录以显示 EditEmployeeWindow(非阻塞),以便用户可以同时编辑多个员工。我唯一的问题是(我们的要求之一)当用户在任何编辑、新窗口上单击保存时,数据必须直接保存到数据库中,并且对于一个模型,保存操作将保存所有更改。

因此,我想到的解决方案之一是创建一个 EditorViewModel,它拥有自己的模型(模型的新实例)并获取已编辑记录的 id。在 EditorViewModel 中,我将重新加载该单条记录,并直接保存对该记录的更改。还可以使用 MVVM-Light Messenger 向 MainViewModel 发送消息以刷新其数据,因为它们将不再相同。

请你指导我!我在正确的轨道上吗?

提前致谢

【问题讨论】:

    标签: silverlight silverlight-4.0 mvvm


    【解决方案1】:

    看起来不错,但我强烈建议您将编辑记录列表存储在主视图模型中的某个位置,以不允许同一记录上有多个窗口。此外,由于您已经准备使用 messenger 与主视图模型进行通信,因此当 main v.m.将收到它的子窗口关闭消息,发送消息给其他窗口,强制它们关闭,然后在主虚拟机上调用刷新方法。

    识别所有窗口何时关闭实际上可能有点棘手(因为您确实在异步工作),有很多方法可以做到这一点,但我建议您遵循:

    1) 跟踪主视图模型的状态(是否已打开窗口,等待所有窗口关闭等)

    2) 当窗口提交操作完成时通知主虚拟机。并从活动记录列表中删除 id。

    3) 当列表中没有更多记录时,刷新数据。

    最终,当您必须添加更多与弹出窗口相关的逻辑时,我建议将弹出相关代码提取到名为 PopupService 之类的类中,它应该是单例的,但我强烈建议您通过其中一个获取它的实例IoC 容器(Unity、MvvmLight one 或事件 MEF)。

    【讨论】:

    • 您好,首先感谢您的快速回复和您提供的提示。我要试试你的建议。老实说,我的脑海中仍有一些问题,但我更愿意将它们推迟到我做样本之前,所以我的问题希望是直接的。谢谢和问候
    猜你喜欢
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    相关资源
    最近更新 更多