3

DataGridTextColumnこのセルのコンテンツが変更されたときにいつでもイベントを発生させることができるカスタムを追加しています。

ご注意ください:

DataGridTemplateColumn私はそれを知っているので、これでa を使用したくありません。私たちが使用するテキスト列には多くの機能があるため、独自のテキスト列を作成したいと考えています。

そこで、イベントをカスタム コントロールに単純に追加することにしました。それほどではありません。AddHandlerorRemoveHandlerメソッドがないことはわかります。

どこが間違っているのか説明してください。

コード:

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

ありがとうございました。

4

1 に答える 1

1

「独自の」カスタマイズされた DatagridTextColumn を作成する場合は、 DataGridTextColumnから継承するCustomControlを作成できます。

これを行うと、グリッドの編集外観に関連付けられているコントロールを返すメソッド「GenerateEditingElement」をオーバーライドできます (通常は TextBox)。

このメソッドをオーバーライドしている間に、イベント ハンドラを Your 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    
}
于 2016-07-19T09:12:25.133 に答える