我正在尝试构建一个datagrid,您可以从头文本框中过滤列数据。我找到了一些教程,但它们听起来都太复杂了。此外,我希望能够在其他项目中重用此FilterDataGrid控件,因此我考虑创建自定义控件。
我认为我非常接近:我可以在标题中显示我的文本框,同时保持基本的数据网格绑定。我现在需要的是能够在我的标题文本框中获取值并使用它来过滤Itemssource中的数据。
这是我到目前为止所得到的:
FilterDataGrid.cs
using System.Windows;
using System.Windows.Controls;
namespace CustomControlTest
{
public class FilterDataGrid : DataGrid
{
static FilterDataGrid()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(FilterDataGrid), new FrameworkPropertyMetadata(typeof(FilterDataGrid)));
}
public void HeaderFilterTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
// Filter data source from input text.
}
}
}
Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CustomControlTest">
<Style TargetType="{x:Type local:FilterDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}">
<Style.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding}"></TextBlock>
<TextBox x:Name="HeaderFilterTextBox" TextChanged="HeaderFilterTextBox_TextChanged"></TextBox>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Style.Resources>
</Style>
</ResourceDictionary>
我的问题是我在HeaderFilterTextBox的TextChanged处理程序中出错:
错误1事件&#39; TextChanged&#39;无法在Style中的Target标记上指定。改为使用EventSetter。
我不知道如何在Generic.xaml中调用此处理程序。如果我能做到这一点,过滤本身不应该太复杂。
有任何线索吗?