我正在开发Xamarin Android应用程序,并使用MvvmCross。我无法在Viewmodels之间传递和检索数据。有什么解决方案?
// 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);
}
IMvxNavigationService
例如,您有FooViewModel
和BarViewModel
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)
{
}
更新来自Denis Gordin的答案,自从MvvmCross 6版本以后,您应该在导航到的类中使用Prepare
方法。
public override void Prepare(DataParameter parameter)
{
}