在MVVMCross中传递视图模型之间的数据

3

我正在开发Xamarin Android应用程序,并使用MvvmCross。我无法在Viewmodels之间传递和检索数据。有什么解决方案?

3个回答

9
这取决于您想要检索的数据。如果是对象,请参考 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);
}

4
使用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)
{
}

0

更新来自Denis Gordin的答案,自从MvvmCross 6版本以后,您应该在导航到的类中使用Prepare方法。

public override void Prepare(DataParameter parameter)
{
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接