wpf – 绑定[VisualStateManager]视图状态到MVVM viewmodel?

wpf – 绑定[VisualStateManager]视图状态到MVVM viewmodel?,第1张

概述如何将控件的VisualStateManager状态绑定到viewmodel中的属性? 可以做吗? 其实你可以。 诀窍是使一个Attached属性和添加一个属性更改的回调实际上调用GoToState: public class StateHelper { public static readonly DependencyProperty StateProperty = Dependency 如何将控件的visualstatemanager状态绑定到viewmodel中的属性?
可以做吗?解决方法 其实你可以。
诀窍是使一个Attached属性和添加一个属性更改的回调实际上调用GoToState:

public class StateHelper {    public static Readonly DependencyProperty StateProperty = DependencyProperty.Registerattached(         "State",typeof( String ),typeof( StateHelper ),new UIPropertyMetadata( null,StateChanged ) );      internal static voID StateChanged( DependencyObject target,DependencyPropertyChangedEventArgs args ) {      if( args.NewValue != null )        visualstatemanager.GoToState( ( FrameworkElement )target,args.NewValue,true );    }  }

然后,您可以在您的xaml中设置此属性,并像任何其他添加绑定到您的视图模型:

<Window .. xmlns:local="clr-namespace:mynamespace" ..>    <TextBox Text="{Binding Path=name,Mode=TwoWay}"             local:StateHelper.State="{Binding Path=State,Mode=TwoWay}" /></Window>

名称和状态是视图模型中的常规属性。当在viewmodel中设置name时,通过绑定或其他方式,它可以更改状态,将更新可视状态。状态也可以由任何其他因素设置,并且仍然会更新文本框上的视图状态。

因为我们使用一个普通的绑定绑定到状态,我们可以应用转换器或任何我们通常能够做的事情,所以viewmodel不必知道它实际设置一个可视状态名称State可以是bool或枚举或任何。

你也可以使用这种方法在.net 3.5上使用wpftoolkit,但是你必须将目标转换为一个Control而不是FrameworkElement。

另一个关于视觉状态的快速注释,确保你不要命名你的视觉状态,以便它们与内置的冲突,除非你知道你在做什么。这对于验证尤其如此,因为验证引擎将在每次绑定被更新时尝试和设置其状态(以及在某些其它时间)。 Go here用于不同控件的视觉状态名称的参考。

总结

以上是内存溢出为你收集整理的wpf – 绑定[VisualStateManager]视图状态到MVVM viewmodel?全部内容,希望文章能够帮你解决wpf – 绑定[VisualStateManager]视图状态到MVVM viewmodel?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1008327.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存