当我使用Prism模板包创建新的Xamarin.Forms应用程序时,将使用从MainPageViewModel
继承的ViewModelBase
创建项目。
稍后,我创建了一个附加的View和ViewModel用于ChatPage。 ChatPageViewModel
的{{1}}继承自BindableBase
,而不是“添加新”对话框生成的ViewModelBase
。
我想在所有View(Models)中使用ViewModelBase ViewModelBase继承自ViewModelBase : BindableBase, INavigationAware, IDestructible
我尝试将新的ChatPageViewModel : BindableBase
更改为ChatPageViewModel : ViewModelBase
,但是构造函数出现一个红色的弯曲错误;
错误CS7036没有给出与“ ViewModelBase.ViewModelBase(INavigationService)”的必需形式参数“ navigationService”相对应的参数。
我在App.xaml.cs中看到containerRegistry.RegisterForNavigation<NavigationPage>();
的实现方式与其他页面containerRegistry.RegisterForNavigation<ChatPage, ChatPageViewModel>();
的实现方式不同
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<NavigationPage>();
containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
containerRegistry.RegisterForNavigation<SettingsPage, SettingsPageViewModel>();
containerRegistry.RegisterForNavigation<ChatPage, ChatPageViewModel>();
containerRegistry.RegisterSingleton<IXpdSettings, XpdSettings>();
containerRegistry.RegisterSingleton<IMqttDataService, MqttDataService>();
}
有没有一种方法可以从ViewModelBase继承?可以/应该在XamarinForms Prism模板中实现它吗?
答案 0 :(得分:0)
答案包含在我的问题中。请参阅MainPageViewModel(由初始项目创建对话框创建)使用的语法-其中MainPageViewModel继承自ViewModelBase,而不同于使用“添加新”对话框创建的后续页面继承自BindableBase。例如,ChatPageViewModel继承自ViewModelBase,而不是BindableBase。
public class ChatPageViewModel : ViewModelBase
{
private IXpdSettings _xpdsettings;
public ChatPageViewModel(INavigationService navigationService, IXpdSettings xpdSettings)
: base(navigationService)
{
Title = "Mqtt Chat";
_xpdsettings = xpdSettings;
}
}