将事件或命令添加到 DataGridTextColumn

本文关键字:DataGridTextColumn 添加 命令 事件 | 更新日期: 2023-09-27 17:57:09

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

请注意:

正如我知道的那样,我不想对此使用DataGridTemplateColumn。我想创建自己的文本列,因为我们使用的文本列附带了很多功能。

所以我决定简单地将一个事件添加到自定义控件 - 足够简单。 没那么多。 好吧,没有AddHandlerRemoveHandler的方法。

请解释我哪里出错了。

法典:

public static readonly RoutedEvent TextChangedEvent =
EventManager.RegisterRoutedEvent("TextChanged", RoutingStrategy.Bubble,
    typeof (RoutedEventHandler),
    typeof (DataGridTextChangedEventColumn));
public event RoutedEventHandler TextChanged
{
    add { AddHandler(TextChangedEvent, value); }
    remove { RemoveHandler(TextChangedEvent, value); }
}
private void AddHandler(RoutedEvent textChangedEvent, RoutedEventHandler value)
{
    this.TextChanged += (s, e) => textChangedEvent;
}

谢谢。

将事件或命令添加到 DataGridTextColumn

如果要创建"您的"自定义 DatagridTextColumn,则可以创建继承自 DataGridTextColumnCustomControl

执行此操作,可以重写返回与网格的编辑外观关联的控件(通常它是一个文本框)的方法"GenerateEditElement"。

重写此方法时,可以将事件处理程序附加到 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    
}