基于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状态的属性选择控制模型)
答案 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}}"/>