我很想知道你们那里的人如何使用MVVM模式处理Silverlight应用程序中的视图状态.假设我有一个简单的搜索掩码,异步调用Web服务.在搜索过程中,我想相应地更改gui: - 禁用"搜索"按钮 - 启用"取消"按钮 - 等
使用wpf我可以创建一个datatrigger,它绑定到viewmodel中的某个属性,然后对gui进行更改.既然我在Silverlight中没有数据触发器,那么与数据触发器类似的最明智的方法是什么(整齐的代码,如果可能的话,在一个地方)?
我这样做的标准方法是从视图模型(通常是枚举)中公开"ViewState"属性.然后视图绑定到属性并使用visualstatemanager根据枚举切换到适当的可视状态.
Expression Samples中的DataStateSwitchBehavior 是如何切换到视觉状态的一个很好的例子.
编辑回应评论
首先,当处理VisualStates时使用Blend(不应该强迫任何人手动编写那么多XAML).我相信它甚至可以用于所有(大多数?)MSDN订阅.
使用Visual States以Visual State Manager开头
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="GroupOne">
<VisualState x:Name="Normal"/>
<VisualState x:Name="Searching"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Run Code Online (Sandbox Code Playgroud)
您通常会将其添加到layoutroot中.
可视状态管理器由一组StateGroups组成,而StateGroups又由一组VisualStates组成.
这些组保持组织的互斥状态,因为您可以在任何时间激活多个视觉状态,但每组只有一个状态.标准模式是使用称为"正常"或"默认"之类的空状态来关闭其他状态.基本状态基本上.
在你的情况下,你将有一个"搜索"视觉状态,其中包含一个故事板,可以禁用各种按钮,激活繁忙的动画等.
| 归档时间: |
|
| 查看次数: |
4203 次 |
| 最近记录: |