【问题标题】:Passing Data Between Viewmodels MvvmCross在视图模型之间传递数据 MvvmCross
【发布时间】:2015-12-07 17:01:17
【问题描述】:

我正在开发 Xamarin Android 应用程序并且我正在使用 MvvmCross。我无法在 Viewmodel 之间传递和检索数据。 解决办法是什么?

【问题讨论】:

    标签: android xamarin viewmodel mvvmcross


    【解决方案1】:

    这取决于您要检索的数据。对于对象,请查看来自 Stuart 的this answer

    当您想要发送/检索非对象数据时,您可以使用build in viewmodel-navigation 来执行此操作,如下例所示:

    // Navigate to viewmodel with parameters
    var param = new Dictionary<string, string>
    {
        {"key1", "value for key 1"
        {"key2", 12}
    };
    
    ShowViewModel<MyViewModel>(param);
    

    然后在您的MyViewModel 中检索参数:

    protected override void InitFromBundle(IMvxBundle parameters)
    {
        if (parameters.Data.ContainsKey("key1"))
        {
            var mykey1value = parameters.Data["key1"]
        }
    
        // And so on
    
        base.InitFromBundle(parameters);
    }
    

    【讨论】:

      【解决方案2】:

      使用 MvvmCross 5,您可以使用 IMvxNavigationService

      例如,您有FooViewModelBarViewModel

      public class FooViewModel : MvxViewModel {}
      public class BarViewModel : MvxViewModel<DataParameter> {}
      

      并且您想将一些数据从 FooVM 传递到 BarVM。 如您所见,BarViewModel 继承自 MvxViewModel,并将 DataParameter 作为泛型类型。这个类描述了我们想要扔给 BarViewModel 的数据。

      public class DataParameter
      {
          public string Name { get; set; }
      }
      

      现在你可以像这样在FooViewModel 中使用IMvxNavigationService

      var parameter = new DataParameter
      {
          Name = "Alex"
      };
      
      await Mvx
         .IoCProvider
         .Resolve<IMvxNavigationService>
         .Navigate<BarViewModel, DataParameter>(parameter);
      

      并通过以下方法捕获数据:

      public override Task Initialize(DataParameter parameter)
      {
      }
      

      【讨论】:

        【解决方案3】:

        更新 Denis Gordin 的答案,从 MvvmCross 6 开始,您应该在导航到的类中使用 Prepare 方法。

        public override void Prepare(DataParameter parameter)
        {
        }
        

        【讨论】:

          猜你喜欢
          • 2015-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-31
          • 2011-09-17
          • 1970-01-01
          相关资源
          最近更新 更多