【发布时间】:2014-08-25 07:53:45
【问题描述】:
我正在寻找更新 GroupStyle 的最佳方式。
CS:
我有一个 GroupStyleSelector(简体):
public class CountBasedGroupStyleSelector : StyleSelector
{
public Style SingleItemGroupStyle { get; set; }
public Style MultipleItemGroupStyle { get; set; }
public override Style SelectStyle(object item, DependencyObject container)
{
var group = item as CollectionViewGroup;
return group.ItemCount == 1 ? SingleItemGroupStyle : MultipleItemGroupStyle;
}
}
XAML:
<tsk:CountBasedGroupStyleSelector x:Key="groupStyleSelector" SingleItemGroupStyle="{StaticResource SingleItemGroupStyle}"
MultipleItemGroupStyle="{StaticResource MultipleItemGroupStyle}" />
<TreeView>
<TreeView.GroupStyle>
<GroupStyle x:Name="groupStyle" ContainerStyleSelector="{StaticResource groupStyleSelector}" />
</TreeView.GroupStyle>
</TreeView>
我不想在发生变化时再次触发 GroupStyleSelector 的选择,例如从组中删除或添加项目时。
有什么想法可以做到这一点吗?
仅供参考,我想在每个 GroupItem 上使用 AttachedProperty Bound 来装配一些东西
GroupItemStyles:(简体)
<Style x:Key="MultipleItemGroupStyle" TargetType="GroupItem">
<Setter Property="Padding" Value="0,0,1,0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<Grid>
<Border Margin="{TemplateBinding Padding}" x:Name="grpOverlayBd" CornerRadius="4" Background="#FFAAAAAA" BorderThickness="0" BorderBrush="Transparent" >
<ItemsPresenter />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SingleItemGroupStyle" TargetType="GroupItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<ItemsPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
【问题讨论】:
-
如何将数据绑定到您的 ItemsSource .Count 属性。每当它更改时,您将组样式应用于树视图,它应该每次都刷新。我正在考虑使 ContainerStyleSelector 依赖于提到的 Count 属性,但不幸的是它不是 DP 属性,因此不允许绑定。
-
有几个 groupitems 每个都需要重新选择它的 groupstyle ,也许我会尝试为常量 groupstyle 这样做,这会改变它的模板和其他属性。
标签: c# wpf xaml groupstyle