当前位置: 首页 > 编程语言 > C#

如何通过ViewModel改变VisualState分享

时间:2023-04-10 12:14:45 C#

如何通过ViewModel改变VisualState我知道这个问题和很多类似。无论如何,我不明白。我有几个VisualStates(超过2个,这就是为什么DataStateBehavior不是我的解决方案)。我有ViewModel,它具有枚举属性CurrentState。每个枚举值代表一个状态,可能有几个枚举值代表一个状态,不满足。我希望VisualState在CurrentState更改时更改(我立即想到:绑定正是为这种情况创建的!)我可以将CurrentState与视图VisualState绑定(仅限xaml解决方案)以获得上述行为?如果是,我该怎么办?如果不是,我应该如何在我的ViewModel中使用VisualStateManager.GoToState()方法?出于多种原因,我不会在ViewModel中使用VisualStateManager.GoToState,最重要的是您必须传递要更改其视觉状态的控件。将UI控件传递给视图模型违背了整个MVVM方法。我的建议是使用(对于Windows8商店)WinrtBehaviors或使用Blendsystem.windows.interactivity.dll(对于相同的功能)从视图模型中获取VisualState名称并更新对象。代码如下所示:ViewModel:publicstringState{get{_stateName;}set{_stateName=value;RaisePropertyChanged("状态");}视图:行为:公共类VisualStateSettingBehavior:Behavior{StateToSet{get{GetValue(StateProperty)asstring;}set{SetValue{StateProperty,value);LoadState();}}privatevoidLoadState(){VisualStateManager.GoToState(AssociatedObject,StateToSet,true);}}行为所做的是连接到控件并允许您以编程方式扩展其功能。此方法允许您将ViewModel与View分开。我想指出一个类似于@FasterSolutions的解决方案,它使用BlendSDK的内置组件。在视图模型的“CurrentState”属性上设置PropertyChangedTrigger,并添加GoToStateAction改变视觉状态:以上是C#学习教程:如何通过ViewModel改变VisualState共享的所有内容,如果对大家和你有用需要了解更多C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: