在v3中,如果我想将两个对象传递给另一个viewmodel:
public class Dog
{
}
public class Cat
{
}
var dog = new Dog();
var cat = new Cat();
ShowViewModel<SomeViewModel>(new {Dog = dog, Cat = cat });
public class SomeViewModel
{
Init(Dog dog, Cat cat)
{
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这是行不通的,因为类型不被识别,不能卡在字典中.如果我希望将这些序列化为json,传递给视图模型,并反序列化为Init参数,我会实现IExtraParser吗?如果这是正确的,我该如何将实现添加到ExtraParsers字典?
更新:
这似乎是这样做的:
var foo = Mvx.Resolve<IMvxFillableStringToTypeParser>();
foo.ExtraParsers.Add(new MyParser());
Run Code Online (Sandbox Code Playgroud) 我有两个按钮,它们都显示一个新的视图模型,但是传递给viewmodel的数据不同.传递的数据并不完全不同,因此它们都从相同的基础继承.不幸的是,似乎传递给viewmodel的Init()方法的数据在途中丢失了它的运行时类型信息?使用调试器(或代码),传递的数据仅被识别为基类 - 而不是实际构造并传递给ShowViewModel <>()方法的派生类.
是什么我试图不可能?
public class BasePasser
{
}
public class PasserA : BasePasser
{
}
public class PasserB : BasePasser
{
}
public class ViewModelOne : MvxViewModel
{
// ...
private void DoSwitchViewModelA()
{
var tobepassed = new PasserA {
// ...
};
ShowViewModel<ViewModelTwo>(tobepassed);
}
private void DoSwitchViewModelB()
{
var tobepassed = new PasserB {
// ...
};
ShowViewModel<ViewModelTwo>(tobepassed);
}
}
public class ViewModelTwo : MvxViewModel
{
// ...
public async Task Init(BasePasser passed)
{
if(passed …Run Code Online (Sandbox Code Playgroud) 我试图将所选项目从列表传递到详细信息视图,但即使它不在,也myitem为空.DetailViewmodelMyViewModel
MyViewModel.cs
public virtual ICommand ItemSelected
{
get
{
return new MvxCommand<MyViewModel>(item =>{SelectedItem = item;});
}
}
public MyViewModel SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
// myItem is NOT null here!!!
ShowViewModel<MyDetailViewModel>(new { date = Date, myItem = _selectedItem });
RaisePropertyChanged(() => SelectedItem);
}
}
Run Code Online (Sandbox Code Playgroud)
MyDetailViewModel.cs
public class MyDetailViewModel: MvxViewModel
{
private MyViewModel _myItem;
public void Init(DateTime date, MyViewModel myItem = null)
{
// myItem is NULL here!!!
_myItem = …Run Code Online (Sandbox Code Playgroud)