我按照以下链接 (filter wpf datagrid values from a textbox) 中的建议创建了图 A。这使我可以在按下按钮时根据 TextBox 中的内容过滤 DataGrid。
然而,一旦我将 Button 和 TextBox 移动到 DataGrid 的列标题中,如图 B 所示。Button 仍然有效,但 TextBox 的 Binding 不起作用,因为它在代码中显示为 null。
http://i42.tinypic.com/2quivpx.png
链接中所做的唯一真正的变化是我的 XAML,我将我的 TextBox 和 Button 放在 DataGridTemplateColumn header 中。
<Grid DataContext="{Binding ElementName=UI}" >
<DataGrid AutoGenerateColumns="False" Height="184" HorizontalAlignment="Left" Margin="12,23,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="384" ItemsSource="{Binding DataGridCollection}">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Name="IDSearcBox" Text="{Binding FilterString}" Width="100"/>
<Button Name="IDSearchButton" Click="IDButton_Click" Content="I" Width="30"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ID}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Name="NameSearchBox" Text="{Binding FilterString}" Width="100"/>
<Button Name="NameSearchButton" Click="NameSearchButton_Click" Content="N" Width="30"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="SomethingElse" Binding="{Binding SomethingElse}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
如有任何帮助,我们将不胜感激!我整天都在为这个问题绞尽脑汁!
(我会在其他帖子上发布一些建议,但我看不到任何选项!)
最佳答案
Textbox
现在位于 DataGrids
ItemSource
DataContext
中,
尝试设置 TextBox 的 DataContext
返回到 UI DataContext
<TextBox Name="IDSearcBox" Text="{Binding FilterString, ElementName=UI}"
关于c# - 从列标题中的 TextBox 筛选 WPF DataGrid 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937894/