我正在用MvvmCross框架潛入Xamarain的世界。在我當前的項目中,我想使用MVVM基礎ViewModel,以便能夠在其他ViewModel中重用我的一些代碼。爲MvvmCross創建基本ViewModel的麻煩5.1.0
當試圖實現這一點時,我遇到了一個問題,當使用支持導航之間傳遞參數的MvxViewModel。
public abstract class BaseViewModel<TParameter> : MvxViewModel, IMvxViewModel<TParameter> where TParameter : class
{
protected readonly IMvxNavigationService _navigationService;
public BaseViewModel(IMvxNavigationService navigationService)
{
_navigationService = navigationService;
}
public new abstract Task Initialize(TParameter parameter);
}
這樣我就可以像下面那樣使用BaseViewModel。
public class ExampleViewModel : BaseViewModel<ExampleParameters>
{
private ExampleParameters _parameter;
public ExampleViewModel(IMvxNavigationService navigationService) : base(navigationService)
{
}
public override Task Initialize(ExampleParameters parameter)
{
return Task.Run(() => { _parameter = parameter; });
}
}
在這種情況下,我認爲這是一個很好的解決方案。 ExampleViewModel甚至告訴我,當我忘記時需要實現Initialize Task。
這種解決方案在任何情況下都不是很好。當我有不需要傳遞參數的ViewModel時,我仍然需要指定一個參數對象並實現Initialize方法。
public class ParameterlessViewModel : BaseViewModel<object>
{
public ParameterlessViewModel(IMvxNavigationService navigationService) : base(navigationService)
{
}
public override Task Initialize(object parameter)
{
return Task.Run(() => { });
}
}
當從本BaseViewModel我不會需要實現初始化方法,但後來我不會強迫來實現它,當我創建需要的參數路過一個視圖模型的抽象方法。
上述解決方案是可行的,但我很好奇,如果有人遇到這個相同的問題,也許有更好的解決方案?一種在兩種情況下都很好,無需設置兩個BaseViewModel類。
親切的問候,
Jop的Middelkamp