向 DataGridTextColumn 添加事件或命令
Adding an event or command to DataGridTextColumn
我正在添加一个自定义 DataGridTextColumn
,它将允许我在该单元格中的内容发生更改时触发一个事件。
请注意:
据我所知,我不想对此使用 DataGridTemplateColumn
。我想创建自己的文本列,因为我们使用的文本列有很多功能。
所以我决定只向自定义控件添加一个事件 - 非常简单。没那么多。好吧,它似乎没有 AddHandler
或 RemoveHandler
方法。
请解释我错在哪里。
代码:
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;
}
谢谢。
如果您想创建 "Your" 自定义 DatagridTextColumn,您可以创建一个继承自 DataGridTextColumn 的 CustomControl。
这样做,您可以覆盖 "GenerateEditingElement" 方法 returns 与网格的编辑外观相关联的控件(通常是 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
}
我正在添加一个自定义 DataGridTextColumn
,它将允许我在该单元格中的内容发生更改时触发一个事件。
请注意:
据我所知,我不想对此使用 DataGridTemplateColumn
。我想创建自己的文本列,因为我们使用的文本列有很多功能。
所以我决定只向自定义控件添加一个事件 - 非常简单。没那么多。好吧,它似乎没有 AddHandler
或 RemoveHandler
方法。
请解释我错在哪里。
代码:
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;
}
谢谢。
如果您想创建 "Your" 自定义 DatagridTextColumn,您可以创建一个继承自 DataGridTextColumn 的 CustomControl。
这样做,您可以覆盖 "GenerateEditingElement" 方法 returns 与网格的编辑外观相关联的控件(通常是 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
}