首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以及在何处部署ViewModel?

如何以及在何处部署ViewModel?
EN

Stack Overflow用户
提问于 2011-05-30 19:15:26
回答 1查看 1K关注 0票数 0

MVVM模式和MVVM Light是很棒的,但有时我觉得我什么都不懂。我在SL4中有一个业务应用程序,到目前为止,我已经有了18个VM。还有更多的东西要写!我正在应用Laurent Bugnion在MIX11 (使用SimpleIoc类)的会话中使用的模式。

一个视图模型绑定到一个视图(命名为"A"),但完全相同的视图模型也绑定到另一个视图(命名为"B")。在ViewModelLocator中以标准方式调用绑定了视图A的Viewmodel。使用不同的键调用与视图B绑定的Viewmodel,以确保它们是两个不同的实例。此外,它们注入了不同的DomainService,因此实体与视图上的控件绑定是不同的。

视图模型注册了一些消息,以跟踪它所交互的其他视图模型中的变化,例如,选择的更改意味着用户希望显示其他内容,以便在数据库上检索数据)。

问题是,如果我调用视图A,然后调用视图B,我注册了两次相同的消息,所以我在DB上有两个操作。

我认为正确的做法是在调用视图B时(通常在关闭视图A时)处理绑定到视图A的视图模型。但我真的不知道该把它放在哪里,什么时候和如何处理!好的..。我可以想象什么时候以及怎样..。但是在哪里呢?

如果你觉得我糊涂了,那你说对了!

EN

回答 1

Stack Overflow用户

发布于 2011-05-31 02:19:20

如果我没理解错的话,您使用的是具有两个不同视图的相同ViewModel。您希望一次只存在VM的一个副本。

在这种情况下,我可能会使用VM的父对象,然后修改VM上的Mode属性。

代码语言:javascript
复制
<DataTemplate x:Key="ViewA" TargetType="{x:Type local:MyViewModel}">
     <TextBlock Text="I'm View A" />
</DataTemplate> 

<DataTemplate x:Key="ViewB" TargetType="{x:Type local:MyViewModel}">
     <TextBlock Text="I'm View B" />
 </DataTemplate>

<DataTemplate DataType="{x:Type local:MyViewModel}">
     <ContentControl Content="{Binding }">
         <ContentControl.Style>
             <Style TargetType="{x:Type ContentControl}">
                 <Setter Property="ContentTemplate" Value="{StaticResource ViewA}" />
                 <Style.Triggers>
                     <DataTrigger Binding="{Binding Mode}" Value="2">
                         <Setter Property="ContentTemplate" Value="{StaticResource ViewB}" />
                     </DataTrigger>
                 </Style.Triggers>
             </Style>
         </ContentControl.Style>
     </ContentControl>
 </DataTemplate>

然后,要切换视图,我只需设置ParentViewModel.CurrentViewModel.Mode = 2,无需更改ViewModel即可切换视图。

如果您想要同一ViewModel的两个不同副本,我仍然可以使用ParentViewModel.CurrentViewModel = ViewModelInstanceB之类的东西在ParentViewModel中处理切换,并将ViewModelInstanceB.Mode设置为2

如果您感兴趣,我写了一些在视图here之间切换的示例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6175563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档