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