![wpf – 绑定[VisualStateManager]视图状态到MVVM viewmodel?,第1张 wpf – 绑定[VisualStateManager]视图状态到MVVM viewmodel?,第1张](/aiimages/wpf+%E2%80%93+%E7%BB%91%E5%AE%9A%5BVisualStateManager%5D%E8%A7%86%E5%9B%BE%E7%8A%B6%E6%80%81%E5%88%B0MVVM+viewmodel%EF%BC%9F.png)
可以做吗?解决方法 其实你可以。
诀窍是使一个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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)