2009-07-16 3 views
1

PersonのリストにバインドされたListBoxがあります。リストボックスの項目をグリッドに表示したい。私は以下のコードでこれを達成することができますが、問題はこのコードでは各項目に独自のグリッドがあることです。グリッドの各列が自動的に最長の文字列の幅にスケールされるように、1つのグリッドにすべての項目を含めるようにします。私は代わりにグリッドにデータをバインドする必要がありますか?どうやって?DataTemplateを使用する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

これは、DataTemplate内のグリッドを使用しても実行できます。リストボックスに添付されたIsSharedSizeScopeプロパティと、同期させるColumnDefinitionsのSharedSizeGroupプロパティを指定するだけで済みます。

また、リストボックスのパネルをグリッドとして定義することもできますが、PersonオブジェクトにGrid.Rowに簡単にバインドするために使用できる順序プロパティがない場合は、これをお勧めしません。

関連する問題