Silverlight DataGrid - настройка текста заголовка группы с информацией из элементов, содержащихся в - PullRequest
2 голосов
/ 11 марта 2011

Я изменил стиль DataGridRowGroupHeader на моей сетке данных, потому что я хочу изменить текст, который он отображает.Я хочу, чтобы он суммировал данные, которые он содержит в своей группе.(В частности, код должен иметь возможность проверять все элементы, хранящиеся в коллекции, чтобы найти тот, который имеет самую старую дату).

У меня возникли проблемы при попытке получить доступ к элементам в коллекции.Я пытался использовать конвертер в 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).Любые идеи, где я иду не так?

1 Ответ

2 голосов
/ 17 марта 2011

Мне пришлось реализовать аналогичную функцию в приложении. Вы уверены, что 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 выше работает в моем случае.

...