Ich versuche noch, MVVM und WPF hier zu lernen.Verschachteltes Ansichtsmodell in WPF
Ich versuche, ein komplexes Ansichtsmodell EditArticleViewModel
zu erstellen. Es hat Code, der für ähnliche Steuerelemente wiederholt wird, und so habe ich den Wiederholungscode in eine andere Klasse verschoben. Dann habe ich mehrere Instanzen dieser anderen Klasse in EditArticleViewModel
hinzugefügt.
Ich werde eine Instanz von EditArticleViewModel
als meines Fensters DataContext
setzen. Und ich werde an Dinge wie Categories.Items
und Subcategories.SelectedItem
binden.
public class CategoryView
{
public ObservableCollection<object> Items { /* */ }
public object SelectedItem { /* ... */ }
}
public class SubcategoryView
{
public ObservableCollection<object> Items { /* */ }
public object SelectedItem { /* ... */ }
}
public class EditArticleViewModel : INotifyPropertyChanged
{
public CategoryView Categories { get; private set; }
public SubcategoryView Subcategories { get; private set; }
public EditArticleViewModel()
{
Categories = new CategoryView();
SubcategoryView Subcategories new SubcategoryView();
}
// Additional properties and methods here
}
Wie Sie sehen können, meine EditArticleViewModel
Klasse implementiert INotifyPropertyChanged
so, dass ich die visuellen Elemente benachrichtigen können, wenn sich etwas geändert hat.
Meine Frage ist, wie ich visuelle Elemente über Änderungen innerhalb CategoryView
und SubcategoryView
benachrichtigen. Gibt es eine Möglichkeit, das Fenster direkt über Änderungen in diesen Klassen zu benachrichtigen? Oder muss ich ein Ereignis von jeder Klasse auslösen und EditArticleViewModel
behandeln dieses Ereignis, um die entsprechende Benachrichtigung zu senden?
Alle Tipps geschätzt.
Könnten Sie 'SubcategoryView' und' CategoryView' 'INotifyPropertyChanged' implementieren lassen und die Ansicht einfach die Änderungen verarbeiten lassen? – Michael
@Michael: Aber dann müsste ich den 'DataContext' nicht auf diese Klassen-Instanzen setzen? –
@ JonathanWood Wenn die Bindung eine bestimmte Eigenschaft für ein bestimmtes Objekt finden kann, glauben Sie nicht, dass sie auch das Objekt finden kann, für das sie die Eigenschaft gefunden hat? Beenden Sie das Ausleihen von Problemen und schreiben Sie einen einfachen Code, um mit diesem Zeug zu spielen. Sie werden bald genug echte Fragen haben. –