2011-03-11 12 views
2
に含まれる情報でカスタマイズする

表示するテキストを変更したいので、DataGridRowGroupHeaderをデータグリッドに再レイアウトしました。 私が望むのは、グループ内で保持しているデータを要約することです。 (具体的には、コレクションに保持されているすべてのアイテムをチェックして、日付が最も古いものを見つけることができるはずです)。Silverlight DataGrid - グループヘッダーテキストを

コレクション内のアイテムにアクセスしようとしていますが、問題があります。 私は、テキストをレンダリングするRowGroupHeaderでコンバータを使用しようとしていましたが、コレクションは常に空に戻ります。

<sdk:DataGrid.RowGroupHeaderStyles> 
     <Style TargetType="sdk:DataGridRowGroupHeader"> 
      <Setter Property="Template"> 
     <!-- All the other spield from the default template, leading to below where the header text is rendered --> 

     <StackPanel Grid.Column="3" Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,1,0,1"> 
      <TextBlock x:Name="PropertyNameElement" Margin="4,0,0,0"/> 
      <TextBlock Margin="4,0,0,0" Text="{Binding Name}" /> 
      <TextBlock x:Name="ItemCountElement" Margin="4,0,0,0" Visibility="{TemplateBinding ItemCountVisibility}"/> 
      <TextBlock x:Name="oldest" Margin="4,0,0,0" Text="{Binding Converter={StaticResource myConverter}, ConverterParameter=Orders}" /> 
     </StackPanel> 

そして、私のコンバータは次のように探しています:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    CollectionViewGroup cvg = value as CollectionViewGroup; 

    if (cvg.Items.Count==0) 
     return "Test Fails"; 
    else 
     return FindOldestObjectInCollection(cvg.Items); 
} 

上記CollectionViewGroupは常に空です - 私はそれがグループ内のすべての項目を含める必要があります信じためにリードしました。 (PagedCollectionViewとして作成されたグループ)。 私は間違っていますか?

答えて

2

アプリケーションにも同様の機能を実装する必要がありました。あなたは、コンバータが実行されているときにCollectionViewGroup.Itemsが埋められていることを確かめますか?それはINotifyCollectionChangedを実装しているため、グループ作成後に変更することができます。

そのため、別の実装を使用して、私は自分自身を行ったように、直接、Itemsプロパティにバインドする必要があります

<ControlTemplate> 
    <StackPanel> 
     <TextBlock x:Name="PropertyNameElement" Margin="4,0,0,0" Visibility="{TemplateBinding PropertyNameVisibility}"/> 
     <TextBlock x:Name="ItemCountElement" Margin="4,0,0,0" Visibility="{TemplateBinding ItemCountVisibility}"/> 
     <local:TendencyUserControl ItemsSource="{Binding Items}" Margin="4,0,0,0" VerticalAlignment="Center"/> 
    </StackPanel> 
</ControlTemplate> 

XAMLを私の場合は作品の上に。

+0

私はちょうど今のコレクション全体ではなく、「現在のグループ」のアイテムをどのように渡すことができますか?名前がコントロールに渡されていても、現在のグループで純粋にアイテムを見つけることはできません。 –

+0

グループヘッダーコンテキストで使用できるitemsプロパティには、すでにグループ項目のみが含まれています。 – Eilistraee

+0

ありがとうございます。私は[Items]がDataGridにデータを取り込むために使用していたItemsSourceだと仮定しました。それがそれ自身の財産であることは分かっていませんでした。 –

関連する問題