代码之家  ›  专栏  ›  技术社区  ›  user5902075

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

  •  2
  • user5902075  · 技术社区  · 8 年前

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

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

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

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   Jerry Nixon    8 年前

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

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

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

    Page.OnNavigatedTo() { ViewModel.Group = AdaptiveVisualStateGroup; } 就是这样。

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