Prism 继承自 ViewModelBase 与 BindableBase
Prism Inheriting from ViewModelBase vs BindableBase
当我使用 Prism 模板包创建一个新的 Xamarin.Forms 应用程序时,项目会创建一个继承自 ViewModelBase
的 MainPageViewModel
稍后我为 ChatPage 创建了一个额外的 View 和 ViewModel say。此 ChatPageViewModel
继承自 BindableBase
而不是 ViewModelBase
由添加新对话框生成的。
我想在我的所有视图(模型)中使用 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 棱镜模板中实现吗?
答案包含在我的问题中。请参阅 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;
}
}
当我使用 Prism 模板包创建一个新的 Xamarin.Forms 应用程序时,项目会创建一个继承自 ViewModelBase
MainPageViewModel
稍后我为 ChatPage 创建了一个额外的 View 和 ViewModel say。此 ChatPageViewModel
继承自 BindableBase
而不是 ViewModelBase
由添加新对话框生成的。
我想在我的所有视图(模型)中使用 ViewModelBase ViewModelBase 继承自 ViewModelBase : BindableBase, INavigationAware, IDestructible
我尝试将新的 ChatPageViewModel : BindableBase
更改为 ChatPageViewModel : ViewModelBase
,但构造函数出现红色波浪形错误;
错误 CS7036 没有给定的参数对应于 'ViewModelBase.ViewModelBase(INavigationService)'
我在 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 棱镜模板中实现吗?
答案包含在我的问题中。请参阅 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;
}
}