0

几乎没有与MVVM和用户控件事件混淆。Silverlight用户控件事件和MVVM

我在我看来有一个用户控件。它有两种模式,即Read和Edit。 (的TextMode)

<Grid 
     x:Name="LayoutRoot" 
     Background="Transparent"> 


       <controls:MyUserControl 
          Mode="{Binding Path=TextMode,Mode=TwoWay}" 
          Text="{Binding Path=ReportText,Mode=TwoWay}" 

       </controls:MyUserControl>   

</Grid> 

当的TextMode更改为“编辑”,我想一个“保存”按钮添加到手机应用程序任务栏,并点击保存按钮时要保存与用户控件中的文本。另外我想在'阅读'视图中禁用保存按钮。 (ie.When TextMode是'阅读')

什么是正确的MVVM方式做到这一点?我想到了两种方法:

1)我想在用户控件上公开ModeChanged属性并将它传播到视图,然后添加保存按钮。 (但这是否违背MVVM的方式,即将代码放在后面?)。

2)从用户控件处理依赖属性本身的属性changed,并添加保存按钮。 (似乎不正确,因为应用程序逻辑混合在usercontrol中)

我如何在此视图模型中涉及?

什么是做MVVM后的这种操作的好方法。

回答

1

ApplicationBar不是一个DependencyObject,因此不能被数据绑定。因此,在这方面,关于MVVM的具体细节没有任何意义。

MVVM的目的是将您的业务逻辑与用户界面分开。因此MVVM不是在宗教上避免代码隐藏。实际上,其中一个危险是试图将视图模型承担过多的责任,因为担心使用代码。

要考虑的最后一件事是,如果您选择这样做,打破全能的MVVM模式只有在别人必须弄清楚您所做的事情时才会成为问题。大多数开发团队在耗尽所有其他可能性(并浪费了半小时或更长时间)之后会在代码隐藏方面寻找代码。但是,在ApplicationBar的情况下,没有其他地方可以。

简而言之,您的第一个选项没有任何问题。