【问题标题】:(UWP) How to access a viewmodel's properties/methods from within a diff. viewmodel?(UWP) 如何从差异中访问视图模型的属性/方法。视图模型?
【发布时间】:2017-04-20 02:07:13
【问题描述】:

在我的 MainView 中,我有一个 MainViewModel 存在于应用程序的整个生命周期中。

我的 MainView 有一个嵌入在自身内部的 Frame。

从该框架导航到的每个页面都有自己的 ViewModel(我认为这种方法是一个很好的模式?)。我们将这些 ViewModel 称为“SubViewModel”

从 SubViewModel 中访问 MainViewModel 属性的最佳方法是什么,反之亦然?

【问题讨论】:

    标签: c# xaml mvvm uwp


    【解决方案1】:

    你不能让其他 ViewModel 可以获取 ViewModels 属性/方法。

    这样做的好处是使用SubViewModel可以发送或发送Message的消息,ViewModel可以处理消息。

    如果 ViewModel 可以处理 SubViewModels 消息,也就是说 SubViewModel 可以获取 ViewModels 方法,因为它可以发送消息调用 ViewModel to do 方法,并且 ViewModel 可以获取 SubViewModels 属性,SubViewModel 可以将其属性发送到 ViewModel .

    如果 SubViewModels 可以处理 ViewModels 消息,就像 ViewModel 可以处理 SubViewModels 消息一样,SubViewModels 可以获取 ViewModels 属性。

    我认为你正在寻找一个框架,我写了一个:https://github.com/lindexi/UWP/blob/master/uwp/src/Framework

    有一些框架,如 MVVMLight 和 thisJP.Utils.UWP

    见:https://github.com/reactiveui/ReactiveUI

    https://github.com/PrismLibrary/Prism

    https://github.com/FantasticFiasco/mvvm-dialogs

    【讨论】:

      【解决方案2】:

      您可以使用静态属性来保存 MainPageViewModel 的当前实例

      public static MainPageViewModel Current { get; private set; }
      
      public MainPageViewModel()
      {
           Current = this;
      }
      

      并使用它来访问其成员。

      MainPageViewModel.Current.MyProperty
      

      【讨论】:

      • 这是一种好的做法,还是只是一种方便?不过,你的方法是我真正想到的。
      • 此方法在 UWP 示例中用于内容页面以从 MainPage 访问成员,例如在 XamlPivot 示例和 ApplicationResources 中。当我需要从较低级别的成员访问视图或视图模型时,我一直使用它,但我不知道这是否是最好的方法。很高兴看到有人有更好的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多