WPF ListView multiselection内部使用自定义复选框
我有一个相当复杂的对象模型,其中包含嵌套的自定义集合对象/模型,如下所示:WPF ListView multiselection内部使用自定义复选框,wpf,xaml,listview,data-binding,multi-select,Wpf,Xaml,Listview,Data Binding,Multi Select,我有一个相当复杂的对象模型,其中包含嵌套的自定义集合对象/模型,如下所示: public sealed class LibraryInfo : NamedModel { public ClassInfos _classes; public ClassInfos Classes { get { return _classes; } set { SetProperty(ref _classes, value); }
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
{
}
根据ClassInfo
选择,我想在另一个ListView
上显示所选类的属性,以进行属性选择
<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>
<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>
问题是,由于我的原始模型不包含任何类似IsActive的属性,因此如何跟踪已选中(复选框已选中)项,以保持与UI相关的字段与模型解耦
我正在寻找一个优雅而简单的解决方案来解决这个问题。使用混合行为
在所选项目的视图模型中使用集合
编写名为updateselecteditemscomand
的ICommand
,并传递用于添加/删除项目的1/0参数
<CheckBox ...>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding UpdateSelectedItemsCommand}"
CommandParameter="1"/>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<i:InvokeCommandAction Command="{Binding UpdateSelectedItemsCommand}"
CommandParameter="0"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
正如您所说,这是一个模型类。要跟踪UI更改,您需要一个ViewModel类。与其直接绑定模型,不如使用视图模型将其包装并绑定到该类。@qqww2,我知道它应该包装在ViewModel中,但这样ViewModel会变得更复杂。我正在寻找简单的解决方案。你能具体地用代码给出指示吗。