habe ich ein ziemlich komplexes Objektmodell Objekte benutzerdefinierte Sammlung verschachtelt haben/Modelle wie unten dargestellt:WPF Listview Multiselektion mit benutzerdefinierten CheckBox innerhalb
public sealed class LibraryInfo : NamedModel
{
public ClassInfos _classes;
public ClassInfos Classes
{
get { return _classes; }
set { SetProperty(ref _classes, value); }
}
}
public class ClassInfos : List<ClassInfo> { }
public sealed class ClassInfo : NamedModel
{
public PropertyInfos _properties;
public PropertyInfos Properties
{
get { return _properties; }
set { SetProperty(ref _properties, value); }
}
}
public class PropertyInfos : List<PropertyInfo> { }
public sealed class PropertyInfo : NamedModel
{
}
I LibraryInfo
Klassen auf einer ListView
für Klassen Auswahl binden möchten.
<ListView SelectedItem="{Binding SelectedClass}" ItemsSource="{Binding LibraryInfo.Classes}">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
</GridView>
</ListView.View>
</ListView>
Und basierend auf ClassInfo
Auswahl I Objekte Auswahl Eigenschaften der ausgewählten Klasse auf einem anderen ListView
zeigen wollen.
<ListView ItemsSource="{Binding SelectedClass.Properties}">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
</GridView>
</ListView.View>
</ListView>
Das Problem ist, dass, wie kann ich (CheckBox IsChecked) Gegenstände, weil mein ursprüngliches Modell enthält keine solche Eigenschaft wie IsActive geprüft Spur UI verwandter Bereich von meinem Modell entkoppelt zu halten.
Ich suche eine elegante und einfache Lösung für dieses Problem.
Wie Sie sagen, das ist eine Modellklasse. Um die Änderungen der Benutzeroberfläche zu verfolgen, benötigen Sie eine ViewModel-Klasse. Anstatt Ihr Modell direkt zu binden, wickeln Sie es mit einem Ansichtsmodell ein und binden Sie es an diese Klasse. –
@ qqww2, ich weiß, dass es in ViewModel eingewickelt werden sollte, aber auf diese Weise werden ViewModel ziemlich komplex. Ich suche stattdessen eine einfache Lösung. Können Sie bitte die Richtung mit dem Code spezifisch angeben. –