如果用户在具有viewmodel作为datacontext的视图上单击新按钮,我该如何重置viewmodel?
例如:
如果我有一个NewCustomer视图,保存后,数据将保存到数据库中,并显示新创建的帐号。但是当用户单击屏幕中的“新建”按钮时,我希望重新初始化视图(viewmodel)。或者,如果用户在屏幕中单击取消以清除所有更改。
我怎样才能做到这一点?我使用Prism 5.0和Unity作为我的容器。
如果我使用了IRegionMemberLifetime,当我离开并再次导航到视图时,我可以清除viewmodel数据(通过在导航离开之前单击New按钮将KeepAlive设置为false)。但是我想要在没有导航的情况下清除表单。可以这样做吗?
答案 0 :(得分:4)
您可以拥有一个screen / workspaceViewModel,以及另一个包装数据的ViewModel。
所以有两个类:CarScreenViewModel
和CarViewModel
。
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表单(或您选择的任何表单),以便用户输入客户详细信息。取消/删除只会从集合中删除该记录。删除还将更新数据库