2

我是 Windows 通用应用程序编程的新手。决定使用 Tmeplate10 创建我的第一个应用程序。我想知道在视图模型中获取当前视觉状态名称的最佳做法是什么。

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

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

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

4

1 回答 1

2

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

如果数据影响视图,例如用户突然注销或其他情况,那么这也是视图模型中用于更改视觉状态的属性(如 IsLoggedIn)。如果您试图在视图模型中获取对视觉状态的引用,那么您有点短路了 MVVM 的意图。

话虽如此,我不是你的应用程序的开发者,你才是。而且,您显示的代码是可靠地获取当前视觉状态的唯一方法。值得指出的是,一个以上的视觉状态可以在多个视觉状态组中同时处于活动状态。如果没有直接引用视图模式中的视觉状态组类,你怎么可能运行你提供的代码?如何到达那里?

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

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

于 2016-02-10T05:42:24.093 回答