如何重置mvvm中的viewmodel

时间:2014-08-04 13:56:31

标签: wpf mvvm prism

如果用户在具有viewmodel作为datacontext的视图上单击新按钮,我该如何重置viewmodel?

例如:

如果我有一个NewCustomer视图,保存后,数据将保存到数据库中,并显示新创建的帐号。但是当用户单击屏幕中的“新建”按钮时,我希望重新初始化视图(viewmodel)。或者,如果用户在屏幕中单击取消以清除所有更改。

我怎样才能做到这一点?我使用Prism 5.0和Unity作为我的容器。

如果我使用了IRegionMemberLifetime,当我离开并再次导航到视图时,我可以清除viewmodel数据(通过在导航离开之前单击New按钮将KeepAlive设置为false)。但是我想要在没有导航的情况下清除表单。可以这样做吗?

2 个答案:

答案 0 :(得分:4)

您可以拥有一个screen / workspaceViewModel,以及另一个包装数据的ViewModel。

所以有两个类:CarScreenViewModelCarViewModel

CarScreenViewModel会有一个属性,比如CurrentCar,它反映了当前在屏幕中选择的内容。然后,当点击Create按钮时,您只需设置:

 CurrentCar = new CarViewModel();

重置部分加载的数据只会导致难以重现的行为。最好从一个新的实例开始。

答案 1 :(得分:1)

您的标准方法将如下所示

的ViewModels

CustomersContainerViewModel包含

CustomerViewModel的集合 和ICommands喜欢

CreateNewCustomer
DeleteExistingCustomer
UpdateExistingCustomer

您的视图将包含 将包含的CustomersContainerView 所需UI元素中的Customer对象集合 创建新客户的按钮(将启动一个新屏幕,其中包含newCustomer字段,它也可以包含取消,这将关闭表单) 要删除的按钮(也可以是ContextMenu) 要更新的按钮(也可以是ContextMenu),它将启动一个填充了DB详细信息的客户表单。

希望这有一定道理......如果您对以上任何内容有任何疑问,请告诉我

更新 - 忘记添加。 NewCustomer Command将向CustomerCollection添加一个新的Customer对象,该对象应打开一个NewCustomer表单(或您选择的任何表单),以便用户输入客户详细信息。取消/删除只会从集合中删除该记录。删除还将更新数据库