【问题标题】:Better Way of Passing Parameter To 2nd Page Through MVVM Light NavigationTo通过 MVVM Light NavigationTo 将参数传递到第二页的更好方法
【发布时间】:2019-07-10 04:18:17
【问题描述】:

我正在使用 MVVM Light,目前我有 2 个 UWP 页面,我在 INavigationService 的子类中注册了它们。如下:

var nav = new CustNavigationService();
nav.Configure("FirstPage", typeof(FirstPage));
nav.Configure("SecondPage", typeof(SecondPage));
SimpleIoc.Default.Register<ICustNavigationService>(() => nav);

我想使用如下导航对象将参数从第一个发送到第二个:

// Inside 1st Page code:
var args = "Hello From Page 1";
var nav = SimpleIoc.Default.GetInstance<ICustNavigationService>();
nav.NavigateTo("SecondPage", args);

无论如何我可以从第二页 ViewModel 的第一页获取传递的参数,而无需在第二页 codebehind 覆盖 OnNavigatedTo 吗?

我试图在不使用 codebehind 的情况下找到优雅的方式。并且不使用 Messaging(我发现它不太优雅)。

谢谢

【问题讨论】:

    标签: c# mvvm-light uwp-xaml


    【解决方案1】:

    一般来说,要在 MVVM Light 中使用视图模型中的参数进行导航,您可以使用NavigationService。但是 mvvm light 在ViewModelBase 基类中没有提供OnNavigatedToAsync 这样的方法。因此,您需要从代码隐藏接收参数。其他方式是使用Messaging

    我建议您使用Template10。相对来说比较全面。并提供OnNavigatedToAsync可视化方法,用于在视图模式下获取导航参数。

    public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState)
    {
        Value = (suspensionState.ContainsKey(nameof(Value))) ? suspensionState[nameof(Value)]?.ToString() : parameter?.ToString();
        await Task.CompletedTask;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      相关资源
      最近更新 更多