ViewModel最佳实践中的可视状态名称

时间:2016-02-09 08:13:26

标签: winrt-xaml template10

我是Windows Universal app编程的新手。决定使用Tmeplate10来创建我的第一个应用程序。 我想知道在View Model中获取Current Visual状态名称的最佳做法是什么。

在XAML背后的代码中,我一直在使用:

 VisualState vs = AdaptiveVisualStateGroup.CurrentState;
 if (vs != null)
 {
   string actualStateName = vs.Name
 }

在ViewModel中获取相同内容的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

请不要试图在视图模型中弄乱视觉状态。考虑到这一点,您的视图模型用于处理视图所需的基础数据。这与在视图中显示数据不同。另一方面,您的视图具有呈现数据的逻辑 - 并且基于某些触发器以不同的视觉状态来执行。这些触发器是可视触发器,而不是数据触发器因此,您应该处理视图中的可视状态和视图的隐式代码隐藏。

如果数据影响视图,就像用户突然或某事注销一样,那么视图模型中的属性(如IsLoggedIn)也是视图用来更改视觉状态的属性。如果您试图在视图模型中获得对可视状态的引用,那么您就会使MVVM的意图发生短路。

话虽这么说,我不是你应用的开发者,你是。而且,您展示的代码是可靠地获取当前视觉状态的唯一方法。值得指出的是,在多个视觉状态组中,一次可以激活多个视觉状态。如果没有在视图模式中直接引用可视状态组类,您怎么可能运行您提供的代码?怎么去那里?

Page.OnNavigatedTo() { ViewModel.Group = AdaptiveVisualStateGroup; }是怎么回事。

但我希望你考虑其余的答案。