Wie kann das klicken auf eine Schaltfläche auf einem UserControl ausführen einer Methode, bei der mit Window?
Ich habe ein UserControl, wir nennen es myUC
ist, das ist eine unter mehreren Benutzersteuerelemente im Hauptfenster (myWindow
) meiner WPF-Anwendung. myUC
enthält eine Reihe von standard-Steuerelemente, eine davon ist ein button, nennen wir es myButton
.
Wenn ich auf myButton
möchte ich ausführen myMethod()
, die vorhanden ist in der code-behind der MeinFenster.
Das problem ist, dass myUC
keine Idee, dass myWindow
noch vorhanden ist, viel weniger, dass myMethod vorhanden ist.
Wie kann ich das senden der Nachricht: 'Hey, myWindow, aufwachen. "myButton" auf myUc war nur geklickt; bitte ausführen myMethod'?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erstellen Sie einen Befehl in das Fenster und setzen Sie die Command-Eigenschaft der Schaltfläche, um den Namen des Befehls. Ein Klick auf die Schaltfläche ausgelöst wird, der Befehl, ohne die Notwendigkeit für einen Verweis auf das übergeordnete Fenster.
Dieses tutorial erklärt alles sehr deutlich.
Was ich am Ende tatsächlich bis zu tun in VB:
Erstellen Sie eine neue Öffentliche Klasse für meine benutzerdefinierte Befehle, da war es unerwünscht, haben meine MainWindow-Klasse als Public:
Erstellen Sie die Execute-und die CanExecute-Methode, führen Sie den gewünschten code. Diese beiden Methoden wurden in der MainWindow-code hinter:
Erstellen Sie den Befehl verbindlich in der MainWindow-code-hinter, und fügen Sie die zwei handler-Methoden, um die Bindung (das ist das Teil, ist ganz anders zwischen C# und VB):
Fügen Sie die neue benutzerdefinierte Befehl dem button-Objekt, auf das Benutzersteuerelement. Mit einem benutzerdefinierten Befehl, dies nicht möglich zu sein scheint, in XAML, so hatte ich es im code-behind. Die Befehle der Klasse notwendig Public sein, damit die Befehle zugänglich waren in diesem UserControl:
Empfehle ich das lernen über Routingereignisse und Weitergeleitet Befehle - dies ist die Art von Sache, die Sie gemeint sind zu tun.
Oben ist alles schön und gut... aber es scheint ein wenig verworren zu mir...
Mein ähnliches problem:
Ich habe ein Fenster (MainWindow.xaml) mit einem UserControl (SurveyHeader.xaml) in der it und innerhalb dieses UserControl ist ein anderes Benutzersteuerelement (GetSurveyByID.xaml). Ich habe einen private void im Hauptfenster.xaml, die ich ausführen möchte, wenn ein button (btnGetSurvey) geklickt wird in GetSurveyByID.xaml.
Diese one-line-Lösung, die sehr gut funktioniert für mich.
Jedes Steuerelement hat eine parent-Eigenschaft, die Ihnen sagt, dass die tatsächlich "besitzt" diese Kontrolle. Können Sie, Seite an Seite mit Typ-casting, um Zugang zu Ihren myWindow ' s myMethod.
Sie können auch die sender argument der Ereignisprozedur wie diese:
Probieren Sie etwas wie dieses statische Hilfsmethode:
Ausführen es so: