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

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

У меня есть нормальный класс До-диеза ViewBase, который расширяет UserControl. Это - единственный .cs файл.

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

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

То, что я хочу сделать возможный вообще? Что я делаю неправильно?

Обратите внимание, что я не изменил свои файлы 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;
    }
}
10
задан Yacoby 15 February 2010 в 10:44
поделиться

1 ответ

TCL можно запрограммировать полностью в интерактивном режиме, и можно точно определить новые процедуры tcl (или переопределить существующие) без сохранения в файле.

Конечно, если вы разрабатываете и все приложение в какой-то момент вы хотите сохранить в файл, иначе вы потеряете все. Используя TCL интроспективные способности, его относительно легко выгрузить часть или все текущее состояние интерпретатора в файл tcl (я написал процедуру, чтобы сделать это проще раньше, однако в основном я бы просто развить в файле в первую очередь, и иметь функцию в приложении для самих ресурсов, если его источник изменяется).

-121--4538122-

Я полагаю, что вы не хотите разбивать его на массив, а скорее вводите места в последовательность? Если да, можно использовать регулярное выражение для замены каждого символа верхнего регистра символом [пробел]. Вам нужно обрезать ведущее пространство.

К сожалению, чтобы ответить на полный вопрос, можно сделать его более универсальным, передав в регулярное выражение совпадение и последовательность для замены совпадений.

Глядя на http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx , не могли бы вы считать MatchEvaluator своим предикатом?

-121--4435064-

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

В этом ваша проблема. Необходимо изменить

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

на

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

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

23
ответ дан 3 December 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: