2017-02-13 4 views
1

У меня есть определенное количество строк в наблюдаемом коллекцию ViewModel, которые группируются и отображаются в datagrid.Отображение количества «заполненных» строк в заголовке группы WPF

<CollectionViewSource x:Key="ColViewSource" Source="{Binding Collection}"> 
    <CollectionViewSource.GroupDescriptions> 
     <PropertyGroupDescription PropertyName="Cat"/> 
    </CollectionViewSource.GroupDescriptions> 
</CollectionViewSource> 

Моих строки содержат текстовое поле и threestate флажка, который должен быть истинным или неопределенным состоянием для строки будут считаться «заполненным» (по умолчанию лжи). Я хотел бы отобразить количество «заполненных» строк в моем групповом блоке из общих элементов в группе. Например, если у меня есть группа с 5 элементами, а пользователь отметил 2 из флажков, я хотел бы видеть 2 из 5 или 2/5 в заголовке группы. Мне удастся получить имя и номер элемента без проблем для отображения в groupheader, но Im застрял в отображении количества заполненных строк. Вот как я хотел бы, чтобы мой заголовок группы выглядел.

<Expander.Header> 
    <StackPanel Orientation="Horizontal" Height="50"> 
     <TextBlock Text="{Binding Name}"/> 
     implement this--> 
     <TextBlock Text = amount of items currently filled. 
     <TextBlock Text="{Binding ItemCount}"/> 
    </StackPanel> 
</Expander.Header> 

Я внедрил свойство, измененное как для моей коллекции, так и для предметов. Я предполагаю, что для этого потребуется какой-то конвертер, может кто-нибудь указать мне в правильном направлении?

+0

Я думаю, что 1-го вам необходимо привязать данные с помощью свойства isChecked checkbox, чтобы узнать, сколько флажков было проверено. 2nd, тогда вы можете добавить код в get свойство поля numOfFilledItems, в ViewModel, чтобы подсчитать его. – Gordon

+0

Вы пытались использовать _IValueConverter_? – Ron

+0

Как определяется тип данных данных, содержащий свойство Cat? – mm8

ответ

1

Согласно this article, Ваш стиль группа должна выглядеть в Xaml:

<local:PercentageConverterx:Key="percentageConverter" /> 
//... 
      <GroupStyle> 
       <GroupStyle.HeaderTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="{Binding Name}"/> 
          <TextBlock Text="{Binding Converter={StaticResource percentageConverter} }"/> 
          <TextBlock Text="{Binding ItemCount}"/> 
         </StackPanel> 
        </DataTemplate> 
       </GroupStyle.HeaderTemplate> 
      </GroupStyle> 
     </DataGrid.GroupStyle> 

, в котором

public class PercentageConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     CollectionViewGroup cvg = value as CollectionViewGroup; 
     int count = 0; 
     int check = 0; 
     foreach (Item t in cvg.Items) 
     { 
      count++; 
      if (t.IsCheck== true) 
       check++; 
     } 
     return (check/(double)count).ToString("0.00") + "%"; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return Binding.DoNothing; 
    } 
} 

Обратите внимание, что я предположил, CollectionViewSource.Source свойство установлено в ObservableCollection, в котором пункт выглядит следующим образом:

public class Item 
{ 
    public string Name {get; set; } 
    public bool? IsChecked { get; set; } 
} 

, который связан с трестом CheckBox.

+0

Используйте аналогичный конвертер, чтобы получить значение Count. – Ron

Смежные вопросы