Wie kann eine Schaltfläche auf ein UserControl klicken, um eine Methode im umgebenden Fenster auszuführen?

8

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 '?

    
Stewbob 16.11.2010, 21:45
quelle

6 Antworten

8

Sie können einen Befehl in dem Fenster erstellen und die Command-Eigenschaft der Schaltfläche auf den Namen dieses Befehls festlegen. Durch Klicken auf die Schaltfläche wird der Befehl ausgelöst, ohne dass ein Verweis auf das übergeordnete Fenster erforderlich ist.

This Tutorial erklärt alles sehr deutlich.

    
Alex B 16.11.2010, 21:55
quelle
5

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%     
Stewbob 16.11.2010 23:12
quelle
4

Ich empfehle, etwas über Routingereignisse und Dan J 16.11.2010 21:55

quelle
3

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%     
JRBlack 01.06.2011 21:05
quelle
0

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:

%Vor%     
M2X 16.11.2010 21:52
quelle
0

Versuchen Sie etwas wie diese statische Hilfsmethode:

%Vor%

Führen Sie es wie folgt aus:

%Vor%     
littlekujo 16.11.2010 22:42
quelle

Tags und Links