绑定到 WPF GridViewHeader 中的元素不起作用
Binding to elements in WPF GridViewHeader doesn't work
我正在尝试为 ListView/GridView 创建自定义 header,用户可以在其中使用文本输入轻松过滤项目:
我已经在 UserControl 的 code-behind 上创建了 DependencyProperties,并将 Xaml 数据上下文绑定到自身 (name=root)。我遇到问题的绑定是 Header 内的 TextBox - 它根本不起作用。如果我将 'ModelVariantId' 设置为“Whatever”,它不会显示,同样我在写入时也不会收到任何 PropertyChanged 事件..
我在互联网上找到了 - 一些 - 听起来相似的问题,但没有完全匹配的问题。
<ListView ItemsSource="{Binding ElementName=root, Path=CombinedCarModels}">
<ListView.View>
<GridView>
<GridViewColumn Width="120" DisplayMemberBinding="{Binding ModelVariantId}">
<GridViewColumn.Header>
<GridViewColumnHeader HorizontalContentAlignment="Stretch">
<StackPanel>
<Label>ModelVariantId</Label>
<TextBox Text="{Binding ElementName=root,
Path=CarModelFilter.ModelVariantId, Mode=TwoWay}" />
</StackPanel>
</GridViewColumnHeader>
</GridViewColumn.Header>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
如果您定义 HeaderTemplate
,此绑定应该有效:
Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},
Path=CarModelFilter.ModelVariantId, Mode=TwoWay}"
XAML:
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Label Grid.Row="0" HorizontalAlignment="Stretch">ModelVariantId</Label>
<TextBox Grid.Row="1" HorizontalAlignment="Stretch"
Text="{Binding ElementName=root, Path=CarModelFilter.ModelVariantId, Mode=TwoWay}" />
</Grid>
</DataTemplate>
</GridViewColumn.HeaderTemplate>
在与 header 相同的命名范围内没有名为“root”的元素,但您应该能够使用 [=13] 绑定到可视化树中的 parent 元素=] 属性.
这假设 parent UserControl
有一个 CarModelFilter
属性。
我正在尝试为 ListView/GridView 创建自定义 header,用户可以在其中使用文本输入轻松过滤项目:
我已经在 UserControl 的 code-behind 上创建了 DependencyProperties,并将 Xaml 数据上下文绑定到自身 (name=root)。我遇到问题的绑定是 Header 内的 TextBox - 它根本不起作用。如果我将 'ModelVariantId' 设置为“Whatever”,它不会显示,同样我在写入时也不会收到任何 PropertyChanged 事件..
我在互联网上找到了 - 一些 - 听起来相似的问题,但没有完全匹配的问题。
<ListView ItemsSource="{Binding ElementName=root, Path=CombinedCarModels}">
<ListView.View>
<GridView>
<GridViewColumn Width="120" DisplayMemberBinding="{Binding ModelVariantId}">
<GridViewColumn.Header>
<GridViewColumnHeader HorizontalContentAlignment="Stretch">
<StackPanel>
<Label>ModelVariantId</Label>
<TextBox Text="{Binding ElementName=root,
Path=CarModelFilter.ModelVariantId, Mode=TwoWay}" />
</StackPanel>
</GridViewColumnHeader>
</GridViewColumn.Header>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
如果您定义 HeaderTemplate
,此绑定应该有效:
Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},
Path=CarModelFilter.ModelVariantId, Mode=TwoWay}"
XAML:
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Label Grid.Row="0" HorizontalAlignment="Stretch">ModelVariantId</Label>
<TextBox Grid.Row="1" HorizontalAlignment="Stretch"
Text="{Binding ElementName=root, Path=CarModelFilter.ModelVariantId, Mode=TwoWay}" />
</Grid>
</DataTemplate>
</GridViewColumn.HeaderTemplate>
在与 header 相同的命名范围内没有名为“root”的元素,但您应该能够使用 [=13] 绑定到可视化树中的 parent 元素=] 属性.
这假设 parent UserControl
有一个 CarModelFilter
属性。