C# 向DataGridTextColumn添加事件或命令

C# 向DataGridTextColumn添加事件或命令,c#,wpf,datagridtextcolumn,C#,Wpf,Datagridtextcolumn,我正在添加一个自定义的DataGridTextColumn,当此单元格中的内容发生更改时,它将允许我触发一个事件 请注意: 据我所知,我不想将DataGridTemplateColumn与此一起使用。我想创建我自己的文本列,因为我们使用的文本列有很多特性 因此,我决定只向自定义控件添加一个事件-非常简单。没有那么多。很明显,没有AddHandler或removehdler方法 请解释一下我错在哪里 代码: 谢谢。如果您想创建“您的”自定义DatagridTextColumn,您可以创建一个继承自

我正在添加一个自定义的
DataGridTextColumn
,当此单元格中的内容发生更改时,它将允许我触发一个事件

请注意:

据我所知,我不想将
DataGridTemplateColumn
与此一起使用。我想创建我自己的文本列,因为我们使用的文本列有很多特性

因此,我决定只向自定义控件添加一个事件-非常简单。没有那么多。很明显,没有
AddHandler
removehdler
方法

请解释一下我错在哪里

代码:

谢谢。

如果您想创建“您的”自定义DatagridTextColumn,您可以创建一个继承自DatagridTextColumnCustomControl

执行此操作时,可以重写“GenerateEditingElement”方法,该方法返回与网格编辑外观关联的控件(通常是文本框)

重写此方法时,可以将事件处理程序附加到TextChanged事件

public class YourCustomDataGridTextColumn : DataGridTextColumn
{


public delegate void ColumnTextChangedHandler(object sender,TextChangedEventArgs e);
public event ColumnTextChangedHandler ColumnTextChanged;

    #region "Methods"

    protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem)
    {
        var textBox = (TextBox)base.GenerateEditingElement(cell, dataItem);
        textBox.TextChanged += OnTextChanged;

        return textBox;
    }

    private void OnTextChanged(object sender, TextChangedEventArgs e)
    {
        //Your event handling
        if (ColumnTextChanged != null) {
                ColumnTextChanged(sender, e);
          }
    }

    #endregion    
}

谢谢,唯一的问题是当我从“GenerateElement”输入“GetBinding”时,它似乎不在那里。我缺少一个映射吗?@JamTay317我的错误。我从我编写的一个类中复制了这个代码段,但没有删除该方法。如果需要,可以忽略它,因为DataGridTextColumn的默认行为是在视图模式下返回Textblock。如何从MainWindow访问?这是什么意思?你要从主窗口做什么?我不明白。你想做什么?
public class YourCustomDataGridTextColumn : DataGridTextColumn
{


public delegate void ColumnTextChangedHandler(object sender,TextChangedEventArgs e);
public event ColumnTextChangedHandler ColumnTextChanged;

    #region "Methods"

    protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem)
    {
        var textBox = (TextBox)base.GenerateEditingElement(cell, dataItem);
        textBox.TextChanged += OnTextChanged;

        return textBox;
    }

    private void OnTextChanged(object sender, TextChangedEventArgs e)
    {
        //Your event handling
        if (ColumnTextChanged != null) {
                ColumnTextChanged(sender, e);
          }
    }

    #endregion    
}