Ich habe ein UserControl, wir nennen es myUC
, das ist eines von mehreren UserControls im Hauptfenster ( myWindow
) meiner WPF-Anwendung. myUC
enthält eine Reihe von Standardsteuerelementen, von denen eines eine Schaltfläche ist, wir nennen es myButton
.
Wenn ich auf myButton
klicke, möchte ich myMethod()
ausführen, das im Code-Behind von myWindow existiert.
Das Problem ist, dass myUC
keine Ahnung hat, dass myWindow
überhaupt existiert, viel weniger als myMethod existiert.
Wie kann ich die Nachricht senden: "Hey, myWindow, wach auf. myButton auf myUc wurde gerade angeklickt; Bitte starte myMethod '?
Was ich eigentlich in VB machen musste:
Erstellen Sie eine neue öffentliche Klasse für meine benutzerdefinierten Befehle, da es unerwünscht ist, dass meine MainWindow-Klasse Public lautet:
%Vor%Erstellen Sie die Methoden Execute und CanExecute, die den gewünschten Code ausführen. Diese beiden Methoden wurden im MainWindow-Code hinterher erstellt:
%Vor%Erstellen Sie die Command-Bindung im MainWindow-Code-Behind und fügen Sie der Bindung die beiden Handler-Methoden hinzu (dies ist der Teil, der zwischen C # und VB ziemlich verschieden ist):
%Vor%Fügen Sie den neuen benutzerdefinierten Befehl dem Schaltflächenobjekt auf dem Benutzersteuerelement hinzu. Mit einem benutzerdefinierten Befehl schien dies in XAML nicht möglich zu sein, also musste ich es in Code-behind machen. Die Commands-Klasse musste Public sein, daher waren die Befehle in diesem UserControl verfügbar:
%Vor%Ich empfehle, etwas über Routingereignisse und Dan J 16.11.2010 21:55
Das obige ist alles gut und gut ... aber scheint mir ein wenig verworren ...
Mein ähnliches Problem: Ich habe ein Fenster (MainWindow.xaml) mit einem UserControl (SurveyHeader.xaml) drin und innerhalb dieses UserControl ist ein anderes UserControl (GetSurveyByID.xaml). Ich habe eine private Lücke in MainWindow.xaml, die ich ausführen möchte, wenn eine Schaltfläche (btnGetSurvey) in GetSurveyByID.xaml geklickt wird.
Diese Ein-Zeilen-Lösung hat mir sehr gut geholfen.
%Vor% Jedes Steuerelement hat eine übergeordnete Eigenschaft, die Ihnen sagt, wer dieses Steuerelement tatsächlich "besitzt". Sie können dies zusammen mit dem Typ-Casting verwenden, um auf myMethod von myWindow zuzugreifen.
Sie können auch das Argument sender Ihres Ereignishandlers wie folgt verwenden:
Versuchen Sie etwas wie diese statische Hilfsmethode:
%Vor%Führen Sie es wie folgt aus:
%Vor%Tags und Links wpf vb.net user-controls