Как я могу заставить пользовательский элемент управления расширить класс, расширяющий UserControl?

Я хочу попытаться создать MVC-проект для моего маленького приложения.

У меня есть обычный класс Csharp класса ViewBase, который расширяет UserControl. Это один файл .cs.

У меня есть несколько классов, которые я хочу расширить ViewBase. Это фактические UserControls, поэтому они имеют код за .cs файлом и .xaml файлом.

Однако CSharp говорит мне, что для этих классов их базовый класс "отличается от объявленного в других частях".

Это то, что я хочу сделать вообще? Что я делаю неправильно?

Обратите внимание, что я не изменял файлы XAML, поэтому они все еще используют теги.

Вот соответствующий код:

// This gives the error in question and ViewBase is underlined
// "Base class of LoginView differs from declared in other parts"
public partial class LoginView : ViewBase {
    public LoginView(Shell shell, ControllerBase controller) : base(shell, controller) {
        InitializeComponent();
    }
}

// This one is a single .cs file
public abstract class ViewBase : UserControl {
    public Shell Shell { get; set; }
    public ControllerBase Controller { get; set; }

    protected ViewBase(Shell shell, ControllerBase controller)
    {
        Shell = shell;
        Controller = controller;
    }
}

Ответ 1

Обратите внимание, что я не изменял свой XAML файлов, поэтому они все еще используют теги

Это ваша проблема. Вам нужно будет изменить:

<UserControl ...>
    ...
</UserControl>

к

<local:ViewBase xmlns:local="clr-namespace:..."
    ...
</local:ViewBase>

Проблема заключается в том, что вы сообщаете компилятору, который вы наследуете ViewBase в одном месте (файл .cs) и UserControl в другом (файл .xaml).