Отображение связанной с данными StackPanel внутри DataTemplate - PullRequest
1 голос
/ 05 июня 2009

У меня есть объекты, которые я привязываю к ListBox в WPF. Вот как должен выглядеть конечный результат:

-------------------------------
| Name    | Opt1    |  Value1 |
|         | Opt2    |  Value2 |
|         | Opt3    |  Value3 |
|         | Opt4    |  Value4 |
-------------------------------

По сути, у меня есть DataTemplate для всей переменной, а затем у комбинации Opt / Value есть свой собственный DataTemplate. Я пытаюсь отобразить список значений как можно проще.

<Label Content="{Binding Path=Identifier.Name, Mode=OneWay}" />
<ListView Grid.Column="1" HorizontalAlignment="Stretch" 
          ItemsSource="{Binding Path=Values, Mode=OneWay}" />

Привязка для значений в настоящее время составляет всего <Grid> с 2 <Label>, и ListView имеет множество функций, которые я не наблюдаю, таких как стили границ, выборки и тому подобное, когда все, что я действительно хочу, это быть в состоянии связать данные, используя список.

Я пытался привязать элементы к панели стека, но не смог заставить его работать в XAML. Я полагаю, другое решение - сделать то, что я делаю, и переписать <Style> для ListView. Любые предложения о правильном способе сделать это?

1 Ответ

7 голосов
/ 06 июня 2009

Это, безусловно, звучит как то, что вы можете сделать с ListBox или ItemsControl, если вы не хотите, чтобы их можно было выбирать. Мы также можем использовать присоединенное свойство IsSharedSizeScope , чтобы отформатировать и выровнять столбцы. Кроме того, взгляните на наследственную наследственность в нижней части ссылки ListBox, она поможет вам определить, какой тип списка вам нужен для различных сценариев.

Попробуйте что-то вроде этого:

<DockPanel>
  <Label Content="{Binding Path=Identifier.Name, Mode=OneWay}" />
  <ListBox ItemsSource="{Binding Path=Values, Mode=OneWay}"
           Grid.IsSharedSizeScope="True">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition SharedSizeGroup="OptionColumn" />
            <ColumnDefinition SharedSizeGroup="ValueColumn" />
          </Grid.ColumnDefinitions>
          <TextBlock Grid.Column="0" Text="{Binding Option}" />
          <TextBlock Grid.Column="1" Text="{Binding Value}" />
        </Grid>
      </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>
</DockPanel>
...