Wie verwende ich Befehlsbefehle in Benutzersteuerelementen in wpf?

8

In MainWindow funktioniert die Befehlsbindung gut. In UserControl1 funktioniert es nicht. Beachten Sie, dass der Datenkontext richtig eingestellt ist, was durch den Inhalt der Schaltfläche, die das Ergebnis einer Bindung ist, belegt wird.

Ich versuche nicht, den Befehl in der Benutzersteuerung an einen Befehl im Hauptfenster oder eine andere solche Tricks zu binden. Ich versuche nur zu reproduzieren, was ich in MainWindow in UserControl1 getan habe.

MainWindow XAML

%Vor%

MainWindow-Code hinter

%Vor%

UserControl XAML

%Vor%

UserControl-Code hinter

%Vor%     
Sam 23.10.2012, 16:56
quelle

2 Antworten

11

Es ist die beste Lösung:

%Vor%

Andere Lösungen:

Sie haben set DataContext auf UserControl1 vergessen.

%Vor%

Und danach müssen Sie in UserControl1 DataContext im Grid löschen.

Dies:

%Vor%

Sie müssen dazu wechseln:

%Vor%

Lösung ohne Set DataContext in UserControl:

Sie müssen ButtonContent und ClickHereCommand in DependencyProperty ändern.

%Vor%

Und in ctor von UserControl1 :

%Vor%     
kmatyaszek 23.10.2012, 17:27
quelle
8

Hier bin ich fast zwei Jahre, nachdem ich das geschrieben habe. Ich habe dieses kleine Feature von WPF vergessen und es hat mich wieder gebissen.

Die oben markierte Antwort ist teilweise korrekt, enthält jedoch andere Inhalte, die störend und / oder falsch sind. Aus Gründen der Klarheit werde ich hervorheben, was das Problem ist, was die Lösung ist. Ich mache das mehr zu meinem Vorteil als deins, weil ich sicher bin, dass ich in ungefähr sechzehn Monaten wieder hier sein werde.

Hier ist das Problem. Tu das nicht. Ihre Bindungen funktionieren alle bis auf Ihre gerouteten Befehle weiter:

%Vor%

Die Lösung besteht in der Verwendung der relativen Quelle beim Festlegen des Datenkontexts wie folgt:

%Vor%

Die einzige Antwort auf das Problem, nach dem ich gefragt habe, ist das obige (es gibt vielleicht andere Antworten, aber sie werden in dieser Frage noch nicht besprochen). Speziell: Das Setzen von "DataContext = this" in der Benutzersteuerung ist KEINE Lösung und wird tatsächlich Bindungen in dem Steuerelement, das das Benutzersteuerelement hostet, unterbrechen. Außerdem müssen nur Eigenschaften, die die Ziele von Bindungen sind, Abhängigkeitseigenschaften sein. Dieser Vorschlag ist falsch.

    
Sam 02.08.2014 00:29
quelle

Tags und Links