有点混淆了MVVM和用户控制事件。
我的视图中有一个用户控件。它有两种模式,即读取和编辑。(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)处理从属属性本身的属性已更改,并从用户控件添加保存按钮。(看起来不太对,因为用户控制中混合了应用程序逻辑)
我该如何让视图模型参与其中?
在MVVM之后执行这些操作的好方法是什么?
发布于 2012-08-16 16:54:07
看看Phone7.Fx中的BindableApplicationBar。它是一个应用程序栏的包装器,更加“MVVM友好”。
http://blog.humann.info/post/2010/08/27/How-to-have-binding-on-the-ApplicationBar.aspx
发布于 2012-08-16 06:21:07
ApplicationBar不是DependencyObject,因此不能进行数据绑定。因此,没有必要纠结于MVVM在这方面的细节。
MVVM的目的是将您的业务逻辑与UI分离。因此,MVVM并不是一味地避免代码隐藏。事实上,其中一个危险是试图将太多的责任强加给View Model,因为他们害怕使用背后的代码。
最后要考虑的一件事是,如果您选择打破万能的MVVM模式,那么只有在其他人必须弄清楚您做了什么的情况下,才是一个问题。大多数开发团队会在用尽所有其他可能性(并浪费半个小时或更多时间)后,在代码隐藏中寻找代码。然而,在ApplicationBar的情况下,它不可能是其他地方。
简而言之,你的第一个选择没有错。
https://stackoverflow.com/questions/11981064
复制相似问题