如何绑定动态创建的扩展器的isexpanded属性

时间:2016-04-26 07:10:55

标签: c# wpf expander

这是我的第一次参赛,所以请耐心等待我。 我的问题是我在DataGrid中有Expanders。扩展器用于分组。我还有一个过滤器文本字段,它过滤视图并仅显示匹配的行。 我的问题是:当搜索找到条目时,分组扩展器isexpanded属性应该为true,如果不使用搜索则为false。 这是我的DataGrid.GroupStyle:

<DataGrid.GroupStyle>
  <GroupStyle ContainerStyle="{StaticResource GroupHeaderSettingsStyle}">
         <GroupStyle.Panel>
              <ItemsPanelTemplate>
                   <DataGridRowsPresenter/>
              </ItemsPanelTemplate>
         </GroupStyle.Panel>
  </GroupStyle>
</DataGrid.GroupStyle>

这是StaticResource

<Style x:Key="GroupHeaderSettingsStyle" TargetType="{x:Type GroupItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GroupItem}">
                        <Expander x:Name="Exp" IsExpanded="{Binding Path=FilterExpander,Mode=TwoWay}">
                            <Expander.Header>
                                <TextBlock Text="{Binding Name}" Foreground="White"/>
                            </Expander.Header>
                            <ItemsPresenter/>
                        </Expander>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

这是我的C#属性:

public bool? FilterExpander
    {
        get
        {
            return _FilterExpander;
        }
        set
        {
            _FilterExpander = value;
            RaisePropertyChanged(() => FilterExpander);
        }
    }

它永远不会进入&#34; get-method&#34;,所以我认为问题出在xaml Code中。但我不确定。

我希望你能帮助我。 如果我忘记了一些代码片段或信息,请告诉我。

由于

我尝试过:

所有&#34;模式&#34; 所有UpdateSourceTriggers, 还有RelativeSource绑定

1 个答案:

答案 0 :(得分:0)

我发现了问题。 View没有找到Property FilterExpander。问题是,Expander查看了Property的ViewCollection。我不得不改变绑定:

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

现在它正常工作。