2012-04-19 4 views
5

私は、メタデータでソートされたさまざまなアイテムを表示することによって課せられるItemsControlを作成しようとしています。各項目は複数のメタデータを持つことができます。たとえば、「会話」タイプのアイテムは、「チャプター」、「アクト」、および「ボリューム」のメタデータを持つことができます。WPF - グループスタイル:「名前」プロパティにのみバインドできますか?

グループ化がWPFでどのように機能するかを調べると、GroupStylesとPropertyGroupDescriptionクラスについて知ることができました。

PropertyGroupDescriptionを継承し、 "メタデータ"タイプのオブジェクトを返す独自のクラスを作成しました。

私のItemsControlのGroupStyle DataTemplateに、返されたオブジェクト(つまり「メタデータ」オブジェクト)にバインドして、そのプロパティを表示することができますか?または私は "名前"にバインドすることを余儀なくされていますか?言い換えれば

:デフォルトでは

<ItemsControl.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.HeaderTemplate> 
      <DataTemplate> 
        Am I forced to bind to "Name" here ? 
      </DataTemplate> 
     </GroupStyle.HeaderTemplate> 
    </GroupStyle> 
</ItemsControl.GroupStyle> 

答えて

13

GroupStyleのデフォルトDataContextことによって、あなたはこのCollectionViewGroup Propertiesと結合することができます。もちろん、必要に応じてBindingSourceを設定することもできます。あなたのグループの使用の最初のオブジェクトを使用する場合は

は:

<TextBlock Text="{Binding Path=Items[0].YourStringProperty}" /> 
+1

しかし、アイテムがGroupDescriptionオブジェクトの項目の配列とではありません。私。 'Metadata'プロパティはアクセス不可能なままですか? – Dani

0

、それは、そのtoString()メソッドを使用して表示をしようとするカスタムオブジェクトに結合すること、名前ではない(まあ、ToStringメソッド()は名前を印刷していますとにかくデフォルトです)。 ToString()メソッドをオーバーライドして別のものを印刷しようとすると、何を意味するのかがわかります。

もちろん、独自のDataTemplateを定義し、別のプロパティにバインドすることができます。

<DataTemplate> 
<TextBlock Text="{Binding XXXXX}"/> 
</DataTemplate> 
関連する問題