在自定义控件内的DataTemplate中设置事件处理程序

时间:2017-09-23 10:00:34

标签: c# wpf xaml datagrid

我正在尝试构建一个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中调用此处理程序。如果我能做到这一点,过滤本身不应该太复杂。

有任何线索吗?

0 个答案:

没有答案