c# - 从列标题中的 TextBox 筛选 WPF DataGrid 值

标签 c# data-binding datagrid wpfdatagrid wpf-4.0

我按照以下链接 (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/

相关文章:

c# - json 从遗留属性名称反序列化

c# - 当我的 wpf 绑定(bind)验证失败并且包含面板不再可见时,如何摆脱红色矩形?

javascript - 如何在 Angularjs 中将计数器值显示为 2 位数字?

AngularJS : The correct way of binding to a service properties

c# - DataGridComboBoxColumn ItemsSource 列表未找到

c# - GPS坐标的默认位置

c# - PropertyBuilder<T> 不包含 HasColumnType 的定义

c# - 在winforms中填充一个巨大的对象

wpf - 如何在数据网格模板中有一个按钮,单击该按钮将删除该项目

wpf - 如何在WPF DataGrid中实现可编辑的DataGridComboBoxColumn