Как мне наследовать представления в WPF при использовании шаблона MVVM? - PullRequest
3 голосов
/ 16 марта 2012

Я немного новичок в 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, чтобы весь контент помещался в третью строку?

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Наследование представлений из пользовательского базового класса - отличное решение для общей логики представлений. Создавайте специализированные элементы UserControls или расширенные шаблоны для создания объектов представлений, которые вы хотите использовать во многих представлениях. Затем сделайте привязку пользовательских элементов управления к данным представлений.

0 голосов
/ 16 марта 2012

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

Если вы думаете об этом больше как о «кнопке», то вы можете как-то понять мое значение.Кнопка WPF имеет особый стиль и макет, который вызывается, когда вы вставляете <Button>Content</Button> в свой XAML.У каждой кнопки также есть раздел Content, который определяет, где в XAML отображается указанный вами контент.Ваш общий макет может быть построен так, что он «просто элемент управления», как кнопка, но имеет встроенную общую функциональность.

Затем вы можете добавить свой конкретный контент в каждый из них.Ваш элемент управления не обязательно должен быть собственным представлением, но при необходимости он может содержать представления со связанными моделями представления.

Итак, ваша панель инструментов - это представление с виртуальной машиной, у которой есть несколько "Инструмент «Управление в нем», для общей раскладки.В каждом инструменте есть раздел «Содержимое» со специфическими для каждого инструмента элементами управления «Просмотр».

...