Wie übergebe ich Parameter vom Xaml-Fenster an den WPF-Usercontrol-Konstruktor? Ich habe versucht, eine Abhängigkeitseigenschaft zu erstellen, aber es schlägt fehl. Sollte ich XAML-Erweiterungen ausprobieren oder gibt es andere Möglichkeiten?
%Vor% xaml.cs des aufrufenden Window
, also sein usercontrol.
InitializeComponent
des obigen Fensters löscht den Wert der durch xaml gesetzten Abhängigkeitseigenschaft, bevor eine Instanz des Benutzersteuerelements erstellt wird, und daher ist der Wert der Eigenschaft dependence immer null.
und usercontrols xaml.cs
%Vor%Beachten Sie, dass ich MVVM-Muster verwende.
Sie übergeben einen Parameter von XAML an die Benutzersteuerung, der nicht funktioniert. Wenn Sie Ihr Benutzersteuerelement aus XAML aufrufen, wird es den Standardkonstruktor Ihres Benutzersteuerelements aufrufen. In Ihrem Fall haben Sie keinen parameterlosen Konstruktor erstellt. Der andere mit dem Parameter Myusercontrol (string User)
wird niemals aufgerufen.
Die beste Option ist, nur den parameterlosen Konstruktor für Ihr Benutzersteuerelement zu haben und nichts mehr.
%Vor%Da Sie MVVM für Ihr Benutzersteuerelement verwenden, sollten Sie MVVM für das Fenster verwenden, das das Benutzersteuerelement hostet - so einfach:
Dort sollten Sie eine Eigenschaft für UserControlViewModel
erstellen und ihre Instanz erstellen. Wenn Sie das tun, wäre es für Sie einfacher, den Datenkontext Ihres Benutzersteuerelements an sein ViewModel zu binden.
Wenn Ihr Benutzersteuerelement an vielen Stellen verwendet wird, empfehle ich die Antwort har07 und verwende die Abhängigkeitseigenschaft. Wenn Ihr Steuerelement jedoch nur ein- oder zweimal verwendet wird und Sie faul genug sind, eine Abhängigkeitseigenschaft zu erstellen, können Sie Ihr Steuerelement immer aus Code erstellen. Erstellen Sie beispielsweise ein Raster als übergeordnetes Element und fügen Sie Ihr Steuerelement als untergeordnetes Element Ihres Rasters ein
XAML
%Vor%Code
%Vor%