如何仅动态扩展单击的扩展器?

时间:2016-04-29 10:31:42

标签: c# wpf expander

我的扩展器出了问题。 (再次...)

我有一个具有未知数量条目的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>

我希望这是可能的,有人可以帮助我。

提前致谢

1 个答案:

答案 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>