MVVM + UserControl + Abhängigkeitseigenschaft
Okay, das ist etwas im Zusammenhang mit dieser Frage: WPF-Drucken von mehreren Seiten von einem single-View-Modell
Ich versuchte, befolgen Sie die Ratschläge gibt, aber jetzt bin ich stecken.
Meine Anwendung nutzt ein MainView.xaml und die entsprechenden MainViewViewModel.cs, ich bin mit MVVM-Light in den hintergrund.
Nun - nach der post - es scheint, muss ich Folgendes tun:
- Erstellen Sie eine Benutzer-Steuerelement -
- Setzen einige Eigenschaften aus dem Benutzer die Kontrolle
- Stellen Sie sicher, dass die view-Modell zeigt diese Eigenschaften
Die Idee ist klar, aber ich bin stecken, wenn Sie versuchen zu notifizieren einander.
Mein user control (UcTest.xaml) stellt ein Dependency-Eigenschaft:
public string SpecialText
{
get { return (string)GetValue(SpecialTextProperty); }
set
{
SetValue(SpecialTextProperty, value);
}
}
//Using a DependencyProperty as the backing store for SpecialText. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SpecialTextProperty =
DependencyProperty.Register("SpecialText", typeof(string), typeof(UcTest), new PropertyMetadata(new PropertyChangedCallback(SpecialTextChangedPropertyCallback)));
private static void SpecialTextChangedPropertyCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
//Do something
Debug.WriteLine("Ffgdgf");
}
Okay, also ich mache das jetzt über eine Benutzer-Steuerung, die einige abhängigkeitseigenschaften. Doch diese Eigenschaften sind vollkommen getrennt von meinem ViewModel-Eigenschaften (das sind die, welche angezeigt werden sollen).
Also im Grunde habe ich zwei Möglichkeiten:
- Wie kann ich jetzt sagen, mein "ViewModel" für das Benutzersteuerelement, dass einige Eigenschaften geändert haben?
- Gibt es eine Möglichkeit zu vergessen, die Abhängigkeit der Eigenschaften und der Zugriff auf das view-model-direkt?
Zusätzliche info #1:
Hochgeladen habe ich ein (einfaches) Beispiel, was ich versuche zu tun, hier: Beispiel-Projekt. Ich möchte den Wert des Labels in UserControl1 (über die binding-Eigenschaft im ViewModel für UserControl1) von meinem MainViewViewModel.
- Verwenden Sie Datenbindung
- Das würde bedeuten, dass mein UserControl würde die INotifyPropertyChanged implementieren müssen, das ist im Grunde das, was mein ViewModel tun sollte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie in der Regel binden die UserControl-Eigenschaft im ViewModel-Eigenschaft. Ein zwei-Wege-binding funktioniert in beide Richtungen, vom ViewModel zur View und Umgekehrt.
Direkt auf die ViewModel-Objekt im obigen Beispiel könnten Sie einfach werfen die UserControl -
DataContext
Eigenschaft im ViewModel-Typ. Der DataContext ist geerbt von der MainWindow.Natürlich könnten Sie auch direkt zuweisen einer spezialisierten ViewModel-Instanz des Benutzersteuerelements
DataContext
:oder Sie erstellen die ViewModel-Instanz als Ressource in der Ressource-Wörterbuch und ordnen Sie die DataContext-wie dies
Okay, nach stundenlangem googeln, es scheint, dass die "richtige" Herangehensweise an das ist nicht es überhaupt zu tun. Der Allgemeine Ansatz ist, um die Daten zu halten in Ihrem MainViewModel und nicht eine zusätzliche ViewModel für die UserControl - (das finde ich ein wenig ... naja .. nicht so gut). Das Hauptproblem ist, dass es keinen einfachen Mechanismus, um die Daten aus der Dependency Property im ViewModel.
Für den Druck, den ich jetzt habe wieder zu tun, es rein im code.