tôi tin rằng có thể có một số Gremlins trong đó câu trả lời trước - sẽ đăng nhập như một vấn đề:/
Có các tuyến đường khác có thể để đạt được kiểu này phức tạp hướng đối tượng serializable vẫn còn sử dụng Json và các bộ phận trọng của khung công tác, nhưng thực sự tôi nghĩ rằng có thể tốt hơn nếu chỉ sử dụng BaseViewModel của riêng bạn để thực hiện tuần tự hóa và deserialization - ví dụ sử dụng mã serialization như:
public class BaseViewModel
: MvxViewModel
{
private const string ParameterName = "parameter";
protected void ShowViewModel<TViewModel>(object parameter)
where TViewModel : IMvxViewModel
{
var text = Mvx.Resolve<IMvxJsonConverter>().SerializeObject(parameter);
base.ShowViewModel<TViewModel>(new Dictionary<string, string>()
{
{ParameterName, text}
});
}
}
với deserialization như:
public abstract class BaseViewModel<TInit>
: MvxViewModel
{
public void Init(string parameter)
{
var deserialized = Mvx.Resolve<IMvxJsonConverter>().DeserializeObject<TInit>(parameter);
RealInit(deserialized);
}
protected abstract void RealInit(TInit parameter);
}
sau đó một ViewModel như thế này:
public class FirstViewModel
: BaseViewModel
{
public IMvxCommand Go
{
get
{
return new MvxCommand(() =>
{
var parameter = new A()
{
String1 = "Hello",
String2 = "World",
ComplexObject = new B()
{
Double1 = 42.0,
Double2 = -1
}
};
ShowViewModel<SecondViewModel>(parameter);
});
}
}
}
thể điều hướng đến một cái gì đó như:
public class SecondViewModel
: BaseViewModel<A>
{
public A A { get; set; }
protected override void RealInit(A parameter)
{
A = parameter;
}
}
tôi đã có thể giải quyết vấn đề này bằng cách thêm Plugin json mvvmcross trong dự án UIView của tôi. –