Я реализовал пользовательский элемент управления ComboBox, элементы коллекции которого имеют группы. Есть заголовки группы и следующие элементы группы. Выглядит это так:
<Style TargetType="{x:Type GroupItem}" x:Key="ComboBoxNoGroupHeaderStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<ItemsPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type GroupItem}" x:Key="ComboBoxDefaultGroupHeaderStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ContentPresenter Grid.Row="0" />
<ItemsPresenter Grid.Row="1" Margin="20,0,0,0" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ppstd:ComboBoxHeaderStyleSelector x:Key="ComboBoxGroupStyleSelector"
ComboBoxNoGroupHeaderStyle="{StaticResource ComboBoxNoGroupHeaderStyle}"
ComboBoxDefaultGroupHeaderStyle="{StaticResource ComboBoxDefaultGroupHeaderStyle}"/>
<DataTemplate x:Key="ComboBoxGroupHeaderTemplate">
<CheckBox Content="{Binding Name}"
FontWeight="Bold">
//IsChecked={Binding IsHeaderCheckboxChecked}" tried this but DataContext is type of GroupItem, which has eg. Name property among others
</CheckBox>
</DataTemplate>
<ComboBox >
<ComboBox.GroupStyle >
<GroupStyle
ContainerStyleSelector = "{StaticResource ComboBoxGroupStyleSelector}"
HeaderTemplate = "{StaticResource ComboBoxGroupHeaderTemplate}" / >
</ComboBox.GroupStyle >
</ComboBox>
Выглядит отлично, но при этом не хватает одной функциональности: выбор элементов группы с помощью флажка заголовка группы. Я подумал, что это можно сделать, добавив свойство IsChecked
к ComboBoxGroupHeaderTemplate
DataTemplate, а затем реализовать эту функцию, когда это свойство установлено, но это не так просто, как я себе представлял. Честно говоря, я застрял в этот момент и не знаю, как дальше go.
Я слышал о Behaviors
, но я никогда не использовал это, и я не знаю, что это Хороший способ достичь этого.
Вопрос: возможно ли этого достичь? Если это так, как? Любые идеи будут полезны.