Несколько сеток в одной области - PullRequest
2 голосов
/ 15 июня 2010

В настоящее время я создаю приложение WPF с использованием C # и XAML в Visual Studios 2010.

У меня есть мастер-сетка. В этой основной сетке у меня есть панель групп, в которой вы можете выбирать различные элементы. В зависимости от того, что вы выбираете, середина основной сетки может быть совершенно другой. Что мне было интересно, так это лучший способ программирования средней части?

Прямо сейчас, я настроил его так, чтобы все посередине динамически программировалось в C #, а все, что снаружи, программируется в XAML.

В C # я запрограммировал: для каждого элемента панели группы есть сетка, которая идет с ним (так, чтобы на нем мог отображаться различный контент). Каждая сетка является дочерней по отношению к основной сетке. Каждая сетка видна или скрыта при необходимости. Это лучший способ подойти к этому?

Лучший пример этого - Outlook 2007, в котором справа находится панель групп. При выборе различных элементов на панели групп (почта, календарь, задачи) право на панели групп полностью изменяется.

1 Ответ

1 голос
/ 16 июня 2010

Простой способ сделать это в WPF - определить шаблоны данных для каждого из ваших «средних» разделов.

Используя пример Outlook, у вас может быть класс MessageCollection, в котором хранится список сообщений, класс EventCollection, в котором хранится список событий календаря, и класс TaskCollection, в котором хранится список задач.

В вашей "средней" области у вас будет просто один ContentPresenter, для содержимого которого будет установлено значение MessageCollection, EventCollection или TaskCollection. Предположительно это будет сделано с помощью привязки к свойству модели представления.

Вот как это может выглядеть:

<Window ...>
  <Grid>
    <!-- group bar area -->
    ...

    <!-- "middle" area -->
    <ContentPresenter Grid.Row="1" Grid.Column="1"
                      Content="{Binding SelectedCollection}" />
  </Grid>
</Window>

Теперь вы создаете шаблон данных для каждого типа коллекции, например:

<DataTemplate TargetType="{x:Type my:MessageCollection}">
  <Grid>
    ... put the XAML for displaying mailbox contents here ...
  </Grid>
</DataTemplate>

<DataTemplate TargetType="{x:Type my:EventsCollection}">
  <Grid>
    ... put the XAML for displaying a calendar here ...
  </Grid>
</DataTemplate>

<DataTemplate TargetType="{x:Type my:TasksCollection}">
  <Grid>
    ... put the XAML for displaying a to-do list here ...
  </Grid>
</DataTemplate>

При такой настройке все, что вам нужно сделать, чтобы переключить внутреннюю сетку, - это установить свойство SelectedCollection в вашей модели представления на другой тип коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...