2016-04-21 7 views
-1

Ich erstelle ein WPF-Benutzersteuerelement, das sozusagen eine SQL WHERE-Klausel "on the fly" generiert. Dieses Steuerelement wiederum hostet eine beliebige Anzahl eines anderen Benutzersteuerelements, das die einzelnen Bedingungen in dieser WHERE-Klausel erstellt. Die Instanzen dieses untergeordneten Steuerelements enthalten mehrere Kombinationsfelder, ein Textfeld (um den Zielwert der Bedingung einzugeben) und einige Schaltflächen - eines zum Hinzufügen von Werten zu einer Liste (z. B. für eine IN-Bedingung). und eine, um die Aussage - und die Kontrolle, die sie darstellt - vollständig zu löschen.geroutete Ereignisse in multi-instanziierten Benutzersteuerelementen wpf

Hier ist das Problem: Wenn ich eine Instanz dieses Anweisungserstellungssteuerelements erstellen, registriert die Steuerelementklasse ein Routingereignis, das ausgelöst wird, wenn der Benutzer auf die Schaltfläche "Löschen" klickt; Dieses Ereignis wird vom Benutzersteuerelement 'parent' verarbeitet, indem das Steuerelement aus dem Stackpanel mit der Liste der 'WHERE'-Bedingungen entfernt wird. Und es funktioniert. Einmal. Wenn ich versuche, eine weitere Instanz dieses Steuerelements hinzuzufügen, wird eine Ausnahme ausgelöst: "RoutedEvent-Name 'DeleteRule' für OwnerType 'SQLBuilder.ClauseControl' wird bereits verwendet."

Ich verbrachte den besseren Teil eines Tages Googeln und besuchen jede StackOverflow-Referenz, die ich fand, aber nichts befasst sich speziell mit dem Problem der Registrierung von Routingereignissen durch mehrere Instanzen eines bestimmten Benutzersteuerelements.

Was fehlt mir hier?

EDIT: Hier ist der Code, wo ich die Veranstaltung bin Registrierung:

public partial class ClauseControl : UserControl 
{ 
    // Register the routed event 
    public readonly RoutedEvent DeleteRule = EventManager.RegisterRoutedEvent("DeleteRule", RoutingStrategy.Bubble, 
       typeof(RoutedEventHandler), typeof(ClauseControl)); 

    public event RoutedEventHandler DeleteRuleEvent 
    { 
     add { AddHandler(DeleteRule, value); } 
     remove { RemoveHandler(DeleteRule, value); } 
    } 

... (Rest der Klassendefinition)

+1

Bitte geben Sie einen relevanten Code ein (mindestens Code, bei dem 'die Steuerklasse ein Routingereignis registriert ') – ASh

Antwort

0

es gelöst! Das RoutedEvent muss als 'statisch' deklariert werden. (Zumindest funktionierte das für mich; Ihre Laufleistung kann variieren.)

Verwandte Themen