2016-04-29 130 views
0

我的扩展器有问题。 (再次...)如何动态扩展点击扩展器?

我有一个数据网格与未知的条目数。每个条目都不同并手动添加。他们每个人都有一个特定的“区域”,他们属于。条目通过“区域”进行分组。分组是通过GroupItem进行的。在这个GroupItem中有一个Expander,带有一个IsExpanded绑定。我也有一个过滤器文本框,其中的条目被过滤,只有正确的一个显示在组中。如果筛选器找到一个条目,则所有扩展器的isExpanded属性应该为true。如果筛选器未找到条目,则isexpanded为false。 这个解决方案的问题是:如果我点击一个扩展器,所有扩展器isExpanded Property设置为true,但它应该只是我单击的那个。

我知道这个bevahiour是因为我只有一个多次创建的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

我找到了解决方案。 我只需要将Expander模式设置为“OneWay”。 这种方式工作正常。 这

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