在视图模型之间传递数据 MvvmCross
Passing Data Between Viewmodels MvvmCross
我正在开发 Xamarin Android 应用程序并且我正在使用 MvvmCross.I 无法在 Viewmodel 之间传递和检索数据。
解决方案是什么?
这取决于您要检索的数据。对于对象,请查看 Stuart 的 this answer。
当你想要 send/retrieve 非对象数据时,你可以使用 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);
}
有了 MvvmCross 5,您可以使用 IMvxNavigationService
例如,您有 FooViewModel
和 BarViewModel
public class FooViewModel : MvxViewModel {}
public class BarViewModel : MvxViewModel<DataParameter> {}
并且您想将一些数据从 FooVM 传递到 BarVM。
如您所见,BarViewModel 继承自 MvxViewModel,其中 DataParameter 作为泛型类型。这个 class 描述了我们要扔给 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)
{
}
更新 Denis Gordin 的答案,自 MvvmCross 6 以来,您应该在导航到的 class 中使用 Prepare
方法。
public override void Prepare(DataParameter parameter)
{
}
我正在开发 Xamarin Android 应用程序并且我正在使用 MvvmCross.I 无法在 Viewmodel 之间传递和检索数据。 解决方案是什么?
这取决于您要检索的数据。对于对象,请查看 Stuart 的 this answer。
当你想要 send/retrieve 非对象数据时,你可以使用 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);
}
有了 MvvmCross 5,您可以使用 IMvxNavigationService
例如,您有 FooViewModel
和 BarViewModel
public class FooViewModel : MvxViewModel {}
public class BarViewModel : MvxViewModel<DataParameter> {}
并且您想将一些数据从 FooVM 传递到 BarVM。 如您所见,BarViewModel 继承自 MvxViewModel,其中 DataParameter 作为泛型类型。这个 class 描述了我们要扔给 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)
{
}
更新 Denis Gordin 的答案,自 MvvmCross 6 以来,您应该在导航到的 class 中使用 Prepare
方法。
public override void Prepare(DataParameter parameter)
{
}