joni7373 Ответов: 2

Как изменить заголовок расширителя WPF datagrid в соответствии со значениями в группе, к которой относится расширитель?


Привет,
Я использую CollectionViewSource в качестве ItemSource для WPF DataGrid для заполнения и группировки DataGrid: (я заполняю его данными из базы данных)

dataTable = new CollectionViewSource
{
    Source = Global.dsAuftraege.Tables[0]
};
            
dataTable.GroupDescriptions.Add(new PropertyGroupDescription("Auftragsnummer"));


Для групп DataGrid я использую следующий стиль:

<Style x:Key="GroupStyle" TargetType="{x:Type GroupItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GroupItem}">
                        <Expander x:Name="expander" IsExpanded="True"

                                  Background="LightBlue"

                                  Foreground="Black">
                            <Expander.Header>
                                <DockPanel>
                                    <TextBlock Style="{StaticResource HeaderTextBlock}" x:Name="ExpanderHeader1" Text="{Binding Name}" Margin="5,0,0,0" Width="200"/>
                                    <TextBlock x:Name="ExpanderHeader2" FontWeight="Normal" Text="{Binding ItemCount}"/>
                                    <TextBlock x:Name="ExpanderHeader3" FontWeight="Normal" Text=""/>
                                </DockPanel>
                            </Expander.Header>
                            <ItemsPresenter/>
                        </Expander>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>


Как вы можете видеть, я использую Расширитель и Расширитель.Заголовок состоит из 3 текстовых блоков. И вот тут возникает моя проблема:
В базовой базе данных у меня есть столбец под названием "Состояние", содержащий целые числа от -1 до 2. Моя DataGrid также показывает эту колонку.
Теперь я хочу сделать то же самое. Расширитель.Заголовок тексты жирный когда внутри расширителей есть ряды Группа с "State"==2.
Более того: я хочу, чтобы считать все строки внутри Группа с "State"==2 и показывают количество в "ExpanderHeader3" элемент управления TextBlock.

Что я уже пробовал:

Я пробовал разные подходы в XAML, но также и в коде позади.

код XAML:
Я пробовал разные триггеры, но не мог заставить его работать.

С фоновым кодом:
Я попытался получить доступ к расширителю в коде позади с помощью VisualTreeHelper, но это не сработало.


Я думаю, что это должно быть возможно решить в XAML, но так как я новичок в этом, я понятия не имею, как это сделать.

Я рад любому предложению.
Спасибо.

2 Ответов

Рейтинг:
10

joni7373

Теперь я решил эту проблему, используя конвертеры для "текста" и "веса шрифта" текстовых полей в расширителе.Привязка заголовка к имени группы выглядит следующим образом:

<TextBlock x:Name="ExpanderHeader3" Width="100"  FontWeight="{Binding Path=Name,Converter={StaticResource fontWeightConverter}}" Text="{Binding Path=Name,Converter={StaticResource nameToActiveConverter}}"/>

Конвертеры идут просто через мою базу данных, ищут "имя" и подсчитывают строки, где "состояние"==2. Затем они возвращают соответствующие считать или Свойство fontweight.

Не совсем изящно и эффективно, потому что я перебираю каждую строку базовой базы данных, но она делает то, что должна.


Рейтинг:
0

Gerry Schmitz

Добавьте свойства (get;set) в контекст данных для Привязок текстовых блоков (Name, ItemCount), запросите данные для параметров и задайте свойства.

Если это сделано один раз (например, в Loaded), возможно, не потребуется реализовывать интерфейс INotifyPropertyChanged.

<TextBlock Style="{StaticResource HeaderTextBlock}" x:Name="ExpanderHeader1" Text="{Binding Name}" Margin="5,0,0,0" Width="200"/>
                                    <TextBlock x:Name="ExpanderHeader2" FontWeight="Normal" Text="{Binding ItemCount}"/>
                                    <TextBlock x:Name="ExpanderHeader3" FontWeight="Normal" 


joni7373

Спасибо за быстрый ответ. Но я ничего не понимаю. Привязки текстового блока Name и ItemCount работают соответствующим образом.
Но я хочу изменить их свойство FontWeight и свойство Text "ExpanderHeader3" в соответствии со столбцом в DataGrid в разных группах. Поэтому моя проблема заключается в том, что я должен смотреть на данные по группам, и я понятия не имею, как это сделать...