Я немного новичок в WPF и шаблоне MVVM.Вот моя ситуация.Мое приложение выглядит как Outlook (2007).Существует левая панель навигации со списком редакторов и правая панель контента, где редакторы будут отображаться на вкладках.Некоторые из моих редакторов выглядят очень похоже.У них будет верхняя панель с сеткой элементов для редактирования.После выбора элемента в нижней панели будет отображаться редактор стиля формы с текстовыми полями, комбинированными полями и т. Д. Я хотел бы инкапсулировать основные функции этих редакторов в базовом классе.Но из того, что я прочитал, вы не можете наследовать XAML.Одно из решений, о котором я упоминал, - создание базового класса UserControl без XAML (только файл .cs).Затем каждое из представлений моего редактора могло унаследовать его и включить в него элементы, относящиеся к редактору, особенно нижнюю панель редактирования.Каждый из редакторов будет иметь свою собственную модель представления, но они также будут наследовать общий класс модели представления.Это хорошее решение или есть лучший способ.
РЕДАКТИРОВАТЬ:
Итак, мой следующий вопрос, как?Я создал следующий базовый класс (без XAML), который динамически создает 3 строки.Первый ряд содержит DataGrid
.Базовый класс определит сетку, но подклассы установят привязку.Второй ряд просто содержит разделитель сетки.И третий ряд пуст.Вот где конкретный редактор поместит свой собственный пользовательский элемент управления.
public class BaseEditor : UserControl
{
public BaseEditor()
{
RowDefinition gridRow = new RowDefinition();
RowDefinition splitterRow = new RowDefinition();
RowDefinition editorRow = new RowDefinition();
_userControlsGrid.RowDefinitions.Add(gridRow);
_userControlsGrid.RowDefinitions.Add(splitterRow);
_userControlsGrid.RowDefinitions.Add(editorRow);
EditorGrid = new DataGrid();
Grid.SetRow(EditorGrid, 0);
_userControlsGrid.Children.Add(EditorGrid);
GridSplitter gridSplitter = new GridSplitter();
Grid.SetRow(gridSplitter, 1);
_userControlsGrid.Children.Add(gridSplitter);
AddChild(_userControlsGrid);
}
}
Затем я попытался создать специальный редактор, который наследуется от BaseEditor.Я установил базовый класс в файле cs для BaseEditor, а также я установил начальные / конечные теги в xaml для BaseEditor.
Я вижу элементы управления в конструкторе конкретного редактора.Однако вскоре я вижу, что это не то, что я ожидал.Если я начну добавлять контент в XAML конкретного редактора, он не будет в третьей строке.Итак, я что-то упустил.В формах Windows вы можете создать область содержимого, используя атрибуты, и дизайнер сможет редактировать только эту область.Как сделать аналогичную вещь в WPF, чтобы весь контент помещался в третью строку?