2016-07-16 14 views
3

Ich füge eine benutzerdefinierte DataGridTextColumn hinzu, mit der ich ein Ereignis auslösen kann, wenn der Inhalt in dieser Zelle geändert wird.Hinzufügen eines Ereignisses oder Befehls zu DataGridTextColumn

Bitte beachten Sie:

Ich möchte nicht über eine DataGridTemplateColumn mit diesem benutzen, wie ich das wissen. Ich möchte meine eigene Textspalte erstellen, da es viele Funktionen gibt, die mit der von uns verwendeten Textspalte geliefert werden.

Also entschied ich mich, einfach ein Ereignis zu einem benutzerdefinierten Steuerelement hinzuzufügen - einfach genug. nicht so viel. Nun, es scheint, dass es keine AddHandler oder RemoveHandler Methoden gibt.

Bitte erläutern Sie, wo ich falsch liege.

Code:

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

Danke.

Antwort

1

Wenn Sie „Ihre“ maßgeschneiderte Datagridtextcolumn zu erstellen, können Sie eine Custom erstellen, die von Datagridtextcolumn erbt.

Dadurch können Sie die Methode "GenerateEditingElement" überschreiben, die das Steuerelement zurückgibt, das mit der Bearbeitungsansicht des Rasters verknüpft ist (normalerweise ist es eine TextBox).

Während Sie diese Methode überschreiben, können Sie einen Ereignishandler an Ihr TextChanged-Ereignis anhängen.

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  
} 
+0

danke, die einzige Sache ist, wenn ich 'GetBinding' von 'GenerateElement' eingeben, scheint es nicht dort zu sein. Fehle ich ein Mapping? – JamTay317

+0

@ JamTay317 Mein Fehler. Ich kopierte diesen Ausschnitt aus einer Klasse, die ich geschrieben hatte, und ich vermisste diese Methode zu löschen. Wenn Sie möchten, können Sie es weglassen, da das Standardverhalten für DataGridTextColumn darin besteht, einen Textblock zurückzugeben, wenn Sie sich im Ansichtsmodus befinden. – CiccioRocca

+0

danke. Ich habe es gelöscht – JamTay317

Verwandte Themen