向DataGridTextColumn添加事件或命令

时间:2016-07-16 14:26:02

标签: c# wpf datagridtextcolumn

我正在添加一个自定义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;
}

谢谢。

1 个答案:

答案 0 :(得分:1)

如果你想创建"你的"自定义DatagridTextColumn,您可以创建一个继承自 DataGridTextColumn CustomControl

这样做,你可以覆盖方法" GenerateEditingElement"返回与网格的编辑外观相关联的控件(通常是TextBox)。

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