c# - 向 DataGridTextColumn 添加事件或命令

标签 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;
}

谢谢。

最佳答案

如果您想创建“您的”自定义 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    
}

关于c# - 向 DataGridTextColumn 添加事件或命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38412150/

相关文章:

c# - .NET 的免费代码度量工具(应该可以通过控制台直接从 NAnt 调用)

c# - 文本框中仅允许字母数字

c# - 左右粗边框

c# - 在 WPF 中向 DataGridTextColumn 添加填充

c# - 如何在DataGridTextColumn中获取文本像素大小

c# - 如何重新设置 DataGridTextColumn 的 TextBox 的样式?

c# - Thread.Sleep 或 Timer 用于显示每一步

c# - 检测没有子项的 mdiContainer 上的双击(c# winforms)

c# - 在 C#/XNA 中使用通用函数进行碰撞检测

c# - WPF、C#、SQL - 在数据库中创建行