首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自定义ListView内部的WPF CheckBox多重选择

使用自定义ListView内部的WPF CheckBox多重选择
EN

Stack Overflow用户
提问于 2016-04-04 05:59:35
回答 1查看 363关注 0票数 1

我有一个相当复杂的对象模型,它具有嵌套的自定义集合对象/模型,如下所示:

代码语言:javascript
复制
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
{
}

我希望将LibraryInfo类绑定到一个ListView上,以便进行类选择。

代码语言:javascript
复制
<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>

基于ClassInfo选择,我希望在另一个ListView上为属性选择显示所选类的属性。

代码语言:javascript
复制
<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>

问题是如何跟踪选中(CheckBox IsChecked)项,因为我的原始模型不包含任何类似IsActive的属性,以保持UI相关字段与Model解耦。

我正在寻找一个优雅而简单的解决这个问题的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 07:15:35

使用混合行为。

对选定的项目在Collection中使用ViewModel

编写一个名为ICommandUpdateSelectedItemsCommand,并传递用于添加/删除项的1/0参数。

代码语言:javascript
复制
        <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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36395464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档