StateHelper(带MVVM的VisualStateManager)

时间:2013-02-18 13:58:04

标签: wpf mvvm visualstatemanager

基于StackOverflow (answered)的问题,或者您可以在GitHub上看到StateHelper本身(已更新)

有效!但是我不明白助手从视图中解析依赖视图模型的方式,当辅助方法SetState从输入参数获取DependencyObject(视图中的控件)时。无论如何,视图模型必须有一个控制链接(它很可怕)并将其传递给帮助者。

我试着用另一种方式提问(如果你很难理解我的英语,那就是这种情况)。我怎样才能从视图模型中改变视觉控制状态。很明显,如果你能给我一个尽可能简单的例子。

此外,我没有触发器的方法。我必须根据更改视图模型属性更改可视状态。 WinRT中的触发器不像以前那样工作。

更新

也许我以错误的方式思考,并且此代码将状态绑定到隐藏在StateHelper中的属性名称。但是我仍然无法做到这一点,我无法理解它必须是一个具有100个项目的面板(用户控件),其中视图模型(该面板)必须改变每个项目的状态。

回答

这是一个愚蠢的问题,我会回答所有那些需要睡觉的人才会问这样的事情。

divil隐藏在使用StateHelper

的这个片段中
<controls:SomeControl x:Name="ball" MyApp:StateHelper.State="{Binding State, Mode=TwoWay}"/>  

“State”是视图模型中的属性,它只是一个具有状态名称的字符串。所有你需要的是改变它,并在“双向”绑定的帮助下调用StateHelper.SetState进行右控制(在我的情况下,我使用了contorl的包装器 - “ControlName”WithStates,我可以在面板视图中设置contol状态的属性选择控制模型)

1 个答案:

答案 0 :(得分:1)

这是一个愚蠢的问题,我会回答所有那些需要睡觉的人才会问这样的事情。

divil隐藏在使用StateHelper

的这个片段中
<controls:SomeControl x:Name="ball" MyApp:StateHelper.State="{Binding State, Mode=TwoWay}"/>  

“State”是视图模型中的属性,它只是一个具有状态名称的字符串。所有你需要的是改变它,并在“双向”绑定的帮助下调用StateHelper.SetState进行右控制(在我的情况下,我使用了contorl的包装器 - “ControlName”WithStates,我可以在面板视图中设置contol状态的属性选择控制模型)

此外,我在视图模型和转换器中使用枚举类型。多亏了这个,我不再在我的视图模型中使用字符串,我的视图片段看起来像

<local:Ball DataContext="{Binding}" common:StateHelper.State="{Binding State, Mode=TwoWay, Converter={StaticResource EnumToBallStatesConverter}}"/>