UWP将VisualStateGroup的CurrentStateChanged绑定到ViewModel

时间:2016-01-02 20:42:34

标签: c# xaml mvvm uwp

我正在尝试将Master / Detail Sample从Microsoft转换为MVVM。 (样本:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/XamlMasterDetail

在Sample中,CurrentStateChanged事件绑定到函数背后的一些代码

MainPage.xaml中

<VisualStateGroup x:Name="AdaptiveStates" CurrentStateChanged="AdaptiveStates_CurrentStateChanged">

MainPage.xaml.cs中

private void AdaptiveStates_CurrentStateChanged(object sender, VisualStateChangedEventArgs e)

如何将其绑定到视图模型?

当我尝试将它绑定到像这样的属性时:

MainPage.xaml中

<VisualStateGroup x:Name="AdaptiveStates" CurrentStateChanged="{Binding AdaptiveStates_OnCurrentStateChanged}">

MainPageViewModel.cs

public ICommand AdaptiveStates_OnCurrentStateChanged
{
   get { throw new NotImplementedException(); }
}

DataContext在代码隐藏文件中设置。

我得到以下编译错误:

  

\ Microsoft.Windows.UI.Xaml.Common.targets(263,5):Xaml内部错误错误WMC9999:对象引用未设置为对象的实例。

这并没有真正告诉我任何关于什么错误的信息。任何人都有任何想法为什么会出现这个错误或我如何实现我的目标?

1 个答案:

答案 0 :(得分:0)

我用x:Bind找到了我的解决方案。

第一步:将ViewModel声明为代码中的属性

MainPage.xaml.cs中

public MainPageViewModel MainPageViewModel { get; set; }

第二步:将AdaptiveStates_OnCurrentStateChanged的方法返回类型更改为预期的VisualStateChangedEventHandler

MainPageViewModel.cs

public VisualStateChangedEventHandler AdaptiveStates_OnCurrentStateChanged

第三步:用x绑定函数:绑定

MainPage.xaml中

    <VisualStateGroup x:Name="AdaptiveStates" CurrentStateChanged="{x:Bind MainPageViewModel.AdaptiveStatesOnCurrentStateChanged}">

我可能花了太多时间搞清楚这一点。我希望这至少会帮助那些遇到同样问题的人。