Наследование призмы из ViewModelBase против BindableBase - PullRequest
1 голос
/ 04 апреля 2019

Когда я создаю новое приложение Xamarin.Forms с использованием пакета шаблонов Prism, проект создается с MainPageViewModel, который наследуется от ViewModelBase

Позже я создаю и дополнительную View и ViewModel, скажем, для ChatPage. ChatPageViewModel наследуется от BindableBase, а не ViewModelBase, созданного в диалоговом окне Добавить новый.

Я хотел бы использовать ViewModelBase во всех моих представлениях (моделях) ViewModelBase наследуется от ViewModelBase : BindableBase, INavigationAware, IDestructible

Я пытаюсь изменить новый ChatPageViewModel : BindableBase на ChatPageViewModel : ViewModelBase, но конструктор получает красную волнистую ошибку; Ошибка CS7036 Не указан аргумент, который соответствует необходимому формальному параметру 'navigationService' из '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 Prism?

1 Ответ

0 голосов
/ 13 апреля 2019

Ответ содержится в моем вопросе. Посмотрите синтаксис, который использует 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...