Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 多编辑窗口_Silverlight_Silverlight 4.0_Mvvm - Fatal编程技术网

Silverlight 多编辑窗口

Silverlight 多编辑窗口,silverlight,silverlight-4.0,mvvm,Silverlight,Silverlight 4.0,Mvvm,请告诉我,我还是MVVM的新手,我将它与Sivlerlight一起使用。我遇到一个场景,其中我有一个包含一个DataGrid的主UserControl,例如Employees。用户可以双击任何datagrid记录以显示EditEmployeeWindow(非阻塞),因此用户可以同时编辑多个员工。我唯一的问题是(我们的要求之一),当用户在任何编辑上单击“保存”时,新窗口中的数据必须直接保存到数据库中,对于一个模型,保存操作将保存所有更改 所以我想到的解决方案之一是创建一个EditorViewMod

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

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

请你引导我!我走对了吗


提前感谢

看起来还可以,但我强烈建议您将编辑记录列表存储在主视图模型中的某个位置,以避免在同一记录上出现多个窗口。另外,由于您将要使用messenger与主视图模型通信,当主v.m.将收到其子窗口关闭消息时,将消息发送到其他窗口,强制它们关闭,然后在主v.m.上调用刷新方法

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

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

2) 窗口提交操作完成后,通知主v.m.并从活动记录列表中删除id

3) 当列表中没有其他记录时,刷新数据


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

Hi,首先感谢您的快速回复和提供的提示。我将尝试一下你的建议。老实说,我脑子里仍然有一些问题,但我更愿意把它们推迟到我做一个样本,所以我的问题,希望是直接的。谢谢和问候