1

WPF で ListBox にデータバインドしているオブジェクトがあります。最終結果は次のようになります。

-------------------------------
| | 名前 | オプション 1 | 値 1 |
| | | | オプション 2 | 値 2 |
| | | | Opt3 | 値 3 |
| | | | Opt4 | 値 4 |
-------------------------------

基本的に、変数全体の DataTemplate があり、Opt/Value コンボには独自の DataTemplate があります。値のリストをできるだけ簡単に表示しようとしています。

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

Values のバインディングは現在<Grid>2のみで<Label>あり、ListView には、リストを使用してデータバインドできるようにすることだけが本当に必要な場合に、境界線のスタイル設定、選択など、私が見ていない多くの機能があります。

アイテムをスタックパネルにデータバインドしようとしましたが、XAML で動作させることができませんでした。別の解決策は、私がやっていることをやって、<Style>ListView を書き直すことだと思います。これを行う正しい方法に関する提案はありますか?

4

1 に答える 1

7

確かにListBoxや、選択可能にしたくない場合は ItemsControl でできることのように思えます。また、IsSharedSizeScope添付プロパティを使用して、列の書式を均一に保つこともできます。また、ListBox リンクの下部にある Inheritance Higharchy を見てください。さまざまなシナリオに必要なリストの種類を判断するのに役立ちます。

次のようなことを試してください:

<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>
于 2009-06-05T21:06:38.323 に答える