使用MVVM处理Silverlight中的视图状态

Man*_* R. 7 silverlight mvvm

我很想知道你们那里的人如何使用MVVM模式处理Silverlight应用程序中的视图状态.假设我有一个简单的搜索掩码,异步调用Web服务.在搜索过程中,我想相应地更改gui: - 禁用"搜索"按钮 - 启用"取消"按钮 - 等

使用wpf我可以创建一个datatrigger,它绑定到viewmodel中的某个属性,然后对gui进行更改.既然我在Silverlight中没有数据触发器,那么与数据触发器类似的最明智的方法是什么(整齐的代码,如果可能的话,在一个地方)?

(我发布了一个类似的问题,但措辞很差)

Gra*_*ury 7

我这样做的标准方法是从视图模型(通常是枚举)中公开"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组成.

这些组保持组织的互斥状态,因为您可以在任何时间激活多个视觉状态,但每组只有一个状态.标准模式是使用称为"正常"或"默认"之类的空状态来关闭其他状态.基本状态基本上.

在你的情况下,你将有一个"搜索"视觉状态,其中包含一个故事板,可以禁用各种按钮,激活繁忙的动画等.