如何绑定动态创建的扩展器的 isexpanded 属性
How do I bind the isexpanded property of dynamically created expanders
这是我的第一篇文章,请耐心等待。
我的问题是我在 DataGrid 中有扩展器。扩展器用于分组。我还有一个过滤文本字段,它过滤视图并仅显示匹配的行。
我的问题是:Grouping expanders isexpanded 属性 在搜索找到条目时应该为 true,如果不使用搜索则应该为 false。
这是我的 DataGrid.GroupStyle:
<DataGrid.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource GroupHeaderSettingsStyle}">
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</DataGrid.GroupStyle>
这是静态资源
<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);
}
}
它永远不会进入 "get-method",所以我认为问题出在 xaml 代码中。但我不确定。
希望你能帮助我。
如果我忘记了一些代码片段或信息,请告诉我。
谢谢
我尝试过的:
全部"modes"
所有 UpdateSourceTriggers,
还有 RelativeSource 绑定
我发现了问题。视图未找到 属性 FilterExpander。问题是,Expander 在 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>
现在可以正常工作了。
这是我的第一篇文章,请耐心等待。 我的问题是我在 DataGrid 中有扩展器。扩展器用于分组。我还有一个过滤文本字段,它过滤视图并仅显示匹配的行。 我的问题是:Grouping expanders isexpanded 属性 在搜索找到条目时应该为 true,如果不使用搜索则应该为 false。 这是我的 DataGrid.GroupStyle:
<DataGrid.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource GroupHeaderSettingsStyle}">
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</DataGrid.GroupStyle>
这是静态资源
<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);
}
}
它永远不会进入 "get-method",所以我认为问题出在 xaml 代码中。但我不确定。
希望你能帮助我。 如果我忘记了一些代码片段或信息,请告诉我。
谢谢
我尝试过的:
全部"modes" 所有 UpdateSourceTriggers, 还有 RelativeSource 绑定
我发现了问题。视图未找到 属性 FilterExpander。问题是,Expander 在 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>
现在可以正常工作了。