1

Мне нужно создать шаблон UserControl, который будет содержать декоративную разметку, и который в дальнейшем можно будет использовать для создания других UserControl, которые, в свою очередь, будут уже внедрятся в главное окно приложения через ContentPresenter. Исходный XAML примерно такой:

<GroupBox Header="Внешняя система">
    <!--OutsideSystem /--!>
</GroupBox>
<GridSplitter Grid.Column="1"
                    Width="3"
                    Margin="1"
                    VerticalAlignment="Stretch"
                    HorizontalAlignment="Center" />
<GroupBox Grid.Column="2"
          Header="Мастер-тур">
<!-- InsideSystem /--!>
</GroupBox>

То есть этот код надо оформить в виде шаблона. На основе этого шаблона будет сформировано несколько UserControl, которые через ContentPresenter будут внедряться в главную форму (в зависимости от выбора пользователя). В местах, обозначенных как InsideSystem и OutsideSystem в итоговых UserControl надо вставить DataGridы.

Можно ли создать такой шаблон из UserControl?

Спасибо

  • В чем вопрос то? – tym32167 Feb 16 '23 at 06:13
  • Style + Template, в чем именно проблема? Вставляйте датагриды в разметку, никаких проблем. – aepot Feb 16 '23 at 12:03
  • @aepot, Style мы оформляем для конкретного элемента, а не набора элементов, организованных в UserControl. Есть ли возможность организовать Template для UserControl, и уже на основе этого Template делать свой UserControl, в который уже и пихать нужные мне DataGrid? – Артемий Соболев Feb 16 '23 at 12:07
  • Как вы себе это представляете? – aepot Feb 16 '23 at 13:56
  • @aepot, не знаю :-) Знал бы не спрашивал. Была мысль подобия наследования в классах. Или создание какого-нибудь контрола, в который я вставлю нужные мне и получу результат. Если такого нет, значит, буду ручками каждый UserControl делать. Видать ещё не настолько совершенна эта технология WPF – Артемий Соболев Feb 16 '23 at 14:51
  • Всё там в WPF нормально. Возможно вы просто либо хотите странного, либо вопрос так задали. Говорите, что хотите вставить таблицу, но не вставляете сразу, и только вам известно, почему. – aepot Feb 16 '23 at 17:23
  • @aepot таких таблиц много, и подгружаться будет та, которую выбрал пользователь из списка. Обрамление у всех будет одинаковым. Только наполнение разным, в том числе и количество столбцов в DataGrid. Корячить тучу DataGrid-ов в главное окно, и играться свойством Visibility - так себе идея. Поэтому используя MVVM буду подгружать соответствующий UserControl в ContentPresenter. В этих UserControl различаться будут только DataGridы. Потому и думал в сторону шаблонов. Одна заготовка, остальные к ней подгружают соответствующий DataGrid. – Артемий Соболев Feb 16 '23 at 17:29
  • Чдается мне, что здесь вообще юзерконтрол не нужен. – aepot Feb 16 '23 at 17:30
  • Что згачит много? Чем они отличаются? – aepot Feb 16 '23 at 17:31
  • @aepot Много значит больше трех. Отличаются всем. Источником данных, количеством столбцов, методами конечной обработки и т.д. Это разные наборы данных, только обрамление одинаковое – Артемий Соболев Feb 16 '23 at 17:41
  • Колонки же на основе данных генерироваться должны, ну или по стилям из можно разнести. Можно таблицы по вьюхам отдельгым раскидать, и данные по вьюмоделям. В зависимости от типа вьюмодели подставляться будет нужная вьюха с таблицей. Как-то так это делается. Вариантов куча, и ни в одном из них не нужен юзерконтрол. Могу пример показать, но для этого вы покажите пример того, что у вас есть и суть проблемы. – aepot Feb 16 '23 at 17:50
  • @aepot Первая мысль была сделать для каждого DataGrid свой ViewModel и подгружать в ContentPresenter, но потом отказался от неё из-за того, что таблицы идут парами, и обрабатывать их надо одновременно в одном классе. Поэтому пришел к мысли UserControl, который имеет свою ViewModel, и там есть свои обработки. Но как это в UI оформить, чтобы не копировать XAML пока не придумал. Пока использую копипасту – Артемий Соболев Feb 16 '23 at 17:58
  • Так за то чтобы их одновременно обрабатывать и т.д. должна бизнес-логика отвечать, а не вью. Верно? – aepot Feb 16 '23 at 18:06
  • Решение, предложенное в предыдущем комментарии - было мне знакомо ранее, и на его основе я делал оформление UI. Но оно не отменяет копипасту для обрамления. И необходимости шаблона для UserControl. – Артемий Соболев Feb 16 '23 at 18:07
  • Совершенно с вами согласен, и вьюха у меня отвечает только за междумордие (interface). UI. А обработка лежит на соответствующих классах. – Артемий Соболев Feb 16 '23 at 18:09
  • Создайте минимальный воспроизводимый пример с копипастой. Давайте исходную задачу решать, а не выбирать, как поглубже и покрасивее вогнать туда то, что вы придумали с юзерконтролом. – aepot Feb 16 '23 at 18:10
  • В вопросе указан код XAML, вместо закомментированных InsideSystem и outsideSystem вставляем два DataGrid, с полным описанием столбцов (AutoGenerateColumn="False"), и все это сейчас лежит в UserControl. К нем прилагается класс ViewModel. в котором получение данных из моделей, и их обработка по полученным командам от пользователя (обработчики ICommand) – Артемий Соболев Feb 16 '23 at 18:18
  • Ну создайте воспроизводимый пример на базе чистого приложения, не с нуля же мне или кому-то ещё пример писать? – aepot Feb 16 '23 at 18:26

0 Answers0