Определите одну сетку для хранения всех элементов ListBox вместо сетки для каждого, используя DataTemplate - PullRequest
1 голос
/ 16 июля 2009

У меня есть ListBox, который связан со списком лиц. Я хочу показать элементы списка в сетке. Я могу сделать это с помощью приведенного ниже кода, но проблема в том, что с этим кодом каждый элемент имеет свою собственную сетку. Я хочу, чтобы одна сетка содержала все элементы, чтобы каждый столбец сетки автоматически масштабировался до ширины самой длинной строки. Я полагаю, что я должен связать данные с сеткой вместо? Как?

<ListBox ItemsSource="{Binding}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition />
          <ColumnDefinition />
          <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" Text="{Binding Path=Name}" />
        <TextBlock Grid.Column="1" Text="{Binding Path=Age}" />
        <TextBlock Grid.Column="2" Text="{Binding Path=Gender}" />
      </Grid>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

1 Ответ

1 голос
/ 16 июля 2009

Вы все еще можете сделать это, используя Grid внутри вашего DataTemplate. Вам просто нужно указать прикрепленное свойство IsSharedSizeScope в вашем ListBox и свойство SharedSizeGroup в ColumnDefinitions, которые вы хотите синхронизировать.

В качестве альтернативы вы можете определить панель ListBoxes как Grid, но я не рекомендую, если ваши объекты Person не имеют свойства упорядочения, которое можно легко использовать для привязки к Grid.Row.

...