我的扩展器出了问题。 (再次...)
我有一个具有未知数量条目的DataGrid。每个条目都不同,并手动添加。他们每个人都有一个特定的“区域”。条目通过“区域”分组。使用GroupItem执行分组。在这个GroupItem中有一个Expander,带有IsExpanded Binding。我还有一个过滤器TextBox,其中条目被过滤,只有正确的一个显示在组中。如果过滤器找到一个条目,则所有扩展器的isExpanded属性应为true。如果过滤器未找到条目,则isexpanded为false。 这个解决方案的问题是:如果我点击一个Expander,所有Expanders isExpanded Property都设置为true,但它应该只是我点击的那个。
我知道这个bevahiour是因为我只有1个Expander,它被多次创建。
现在问题: 是否可能只打开我单击的扩展器,如果过滤器找到一个值,那么所有扩展器都会打开?
这是财产:
public bool? FilterExpander
{
get
{
return _FilterExpander;
}
set
{
_FilterExpander = value;
RaisePropertyChanged(() => FilterExpander);
}
}
这是扩展器所在的Headerstyle:
<Style x:Key="GroupHeaderSettingsStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander x:Name="Exp" IsExpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.FilterExpander}" >
<Expander.Header>
<TextBlock Text="{Binding Name}" Foreground="White"/>
</Expander.Header>
<ItemsPresenter/>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我希望这是可能的,有人可以帮助我。
提前致谢
答案 0 :(得分:0)
我找到了解决方案。 我只需要将扩展器模式设置为&#34; OneWay&#34;。 这样它工作正常。 此
<expander x:name="Exp" isexpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.FilterExpander}"</expander>
应该是
<expander x:name="Exp" isexpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.FilterExpander, Mode=OneWay}"</expander>