我是Windows Universal app编程的新手。决定使用Tmeplate10来创建我的第一个应用程序。 我想知道在View Model中获取Current Visual状态名称的最佳做法是什么。
在XAML背后的代码中,我一直在使用:
VisualState vs = AdaptiveVisualStateGroup.CurrentState;
if (vs != null)
{
string actualStateName = vs.Name
}
在ViewModel中获取相同内容的最佳方法是什么?
答案 0 :(得分:2)
请不要试图在视图模型中弄乱视觉状态。考虑到这一点,您的视图模型用于处理视图所需的基础数据。这与在视图中显示数据不同。另一方面,您的视图具有呈现数据的逻辑 - 并且基于某些触发器以不同的视觉状态来执行。这些触发器是可视触发器,而不是数据触发器因此,您应该处理视图中的可视状态和视图的隐式代码隐藏。
如果数据影响视图,就像用户突然或某事注销一样,那么视图模型中的属性(如IsLoggedIn)也是视图用来更改视觉状态的属性。如果您试图在视图模型中获得对可视状态的引用,那么您就会使MVVM的意图发生短路。
话虽这么说,我不是你应用的开发者,你是。而且,您展示的代码是可靠地获取当前视觉状态的唯一方法。值得指出的是,在多个视觉状态组中,一次可以激活多个视觉状态。如果没有在视图模式中直接引用可视状态组类,您怎么可能运行您提供的代码?怎么去那里?
Page.OnNavigatedTo() { ViewModel.Group = AdaptiveVisualStateGroup; }
是怎么回事。
但我希望你考虑其余的答案。