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会变得更复杂。我正在寻找简单的解决方案。你能具体地用代码给出指示吗。