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;
    }
}