从ViewModelBase与BindableBase继承的棱镜

时间:2019-04-04 18:47:46

标签: xamarin.forms prism

当我使用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模板中实现它吗?

1 个答案:

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