Wpf StateHelper(带MVVM的VisualStateManager)

Wpf StateHelper(带MVVM的VisualStateManager),wpf,mvvm,visualstatemanager,Wpf,Mvvm,Visualstatemanager,基于的问题,或者您可以在上看到StateHelper本身(已更新) 它起作用了!但我不明白当helper方法设置state获取DependencyObject(视图控件)作为输入参数时,helper从视图解析依赖关系视图模型的方式。无论如何,视图模型必须有一个到控件的链接(这很糟糕)并将其传递给助手 我试着问另一种方法(只是为了以防万一,如果你很难理解我的英语)。如何从视图模型动态更改控件的可视状态。很明显,如果你能给我一个尽可能简单的例子 我也没有办法作为触发器。我必须根据更改视图模型属性更改

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

它起作用了!但我不明白当helper方法设置state获取DependencyObject(视图控件)作为输入参数时,helper从视图解析依赖关系视图模型的方式。无论如何,视图模型必须有一个到控件的链接(这很糟糕)并将其传递给助手

我试着问另一种方法(只是为了以防万一,如果你很难理解我的英语)。如何从视图模型动态更改控件的可视状态。很明显,如果你能给我一个尽可能简单的例子

我也没有办法作为触发器。我必须根据更改视图模型属性更改视觉状态。WinRT中的触发器不像我以前看到的那样工作

更新 也许我的想法是错误的,这段代码将状态绑定到隐藏在StateHelper中的属性名。但我仍然无法做到这一点,我无法理解对于一个包含100个项目的面板(用户控件),视图模型(此面板的)必须更改每个项目的状态

回答
这是一个愚蠢的问题,我会为所有需要睡眠的人回答,然后再问类似的问题

在使用StateHelper的这段代码中隐藏了一个divil

<controls:SomeControl x:Name="ball" MyApp:StateHelper.State="{Binding State, Mode=TwoWay}"/>  
<controls:SomeControl x:Name="ball" MyApp:StateHelper.State="{Binding State, Mode=TwoWay}"/>  


“State”是视图模型中的一个属性,它只是一个带有状态名称的字符串。您只需更改它,并借助“双向”绑定调用stateheloper.SetState以获得正确的控制(在我的例子中,我使用了一个包装器,用于contorl-“ControlName”和STATES,并且我可以在面板视图模型中为choosen控制设置控制状态的属性)这是一个愚蠢的问题,在问类似问题之前,我会回答所有需要睡眠的人

在使用StateHelper的这段代码中隐藏了一个divil

<controls:SomeControl x:Name="ball" MyApp:StateHelper.State="{Binding State, Mode=TwoWay}"/>  
<controls:SomeControl x:Name="ball" MyApp:StateHelper.State="{Binding State, Mode=TwoWay}"/>  

“State”是视图模型中的一个属性,它只是一个带有状态名称的字符串。您只需更改它,并借助“双向”绑定调用stateheloper.SetState以获得正确的控制(在我的例子中,我使用了一个包装器,用于contorl-“ControlName”和STATES,并且我可以在面板视图模型中为choosen控制设置控制状态的属性)

此外,我在视图模型中使用枚举类型,在视图中使用转换器。由于这一点,我不再在视图模型中使用字符串,视图片段看起来像

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

没有愚蠢的问题。把你的答案作为答案贴出来并接受它。