找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2666|回复: 12

WPF界面开发技巧你知多少?Data Editors如何实现多选?

 火.. [复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:6
  • 打卡总奖励:9027
  • 最近打卡:2025-12-17 23:15:51

2823

主题

541

回帖

2万

积分

管理员

积分
22569
发表于 2021-4-28 22:35:18 | 显示全部楼层 |阅读模式
通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。
如何启用多重选择
默认情况下,ComboBoxEdit、LookUpEdit和ListBoxEdit编辑器使用单个选择。 要在这些编辑器中启用多个选择,您需要更改其操作模式 - 在其StyleSettings属性中使用相应的设置对象:
<dxe:ComboBoxEdit ...><dxe:ComboBoxEdit.StyleSettings><dxe:CheckedComboBoxStyleSettings/></dxe:ComboBoxEdit.StyleSettings></dxe:ComboBoxEdit>
我们在以下帮助主题中描述了可用的设置对象:
  • ComboBoxEdit operation modes
  • LookUpEdit operation modes
  • ListBoxEdit operation modes
注意:在In-Place模式下定义这些编辑器时,将使用ComboBoxEditSettings、LookUpEditSettings和ListBoxEditSettings对象,这些对象也具有StyleSettings属性:
<dxg:GridColumn ...><dxg:GridColumn.EditSettings><dxe:ComboBoxEditSettings ...><dxe:ComboBoxEditSettings.StyleSettings><dxe:CheckedComboBoxStyleSettings/></dxe:ComboBoxEditSettings.StyleSettings></dxe:ComboBoxEditSettings></dxg:GridColumn.EditSettings></dxg:GridColumn>
在ListBoxEdit和ListBoxEditSettings中,可以通过将SelectionMode属性设置为Multiple或Extended来启用多重选择(请参阅:SelectionMode Enum)。
绑定数据
启用多个选择的编辑器在其EditValue属性中使用List Object数据类型的值,在编辑器中选择项目时,它将使用选定的值创建List Object数据类型的新实例,哪些值将存储在此列表中取决于您是否定义ValueMember属性。
假设您具有以下Item类,Items集合属性(在编辑器的ItemsSource属性中使用)和SelectedItems属性(在EditValue属性中使用):
public class Item{public int Id { get; set; }public string Name { get; set; }}...public ObservableCollection<Item> Items { get; set; } = new ObservableCollection<Item>(Enumerable.Range(0, 10).Select(c => new Item{Id = c,Name = "Item #" + c}));public List<Object> SelectedValues { get; set; }
如果您不定义ValueMember
<dxeistBoxEdit ItemsSource="{Binding Items}"EditValue="{Binding SelectedValues}"DisplayMember="Name"><dxeistBoxEdit.StyleSettings><dxe:CheckedListBoxEditStyleSettings/></dxeistBoxEdit.StyleSettings></dxeistBoxEdit>
EditValue和SelectedValues属性将包含List Object以及从Items中选择的Item对象。


如果您定义ValueMember
<dxeistBoxEdit ItemsSource="{Binding Items}"EditValue="{Binding SelectedValues}"ValueMember="Id"DisplayMember="Name"><dxeistBoxEdit.StyleSettings><dxe:CheckedListBoxEditStyleSettings/></dxeistBoxEdit.StyleSettings></dxeistBoxEdit>
EditValue和SelectedValues属性将包含List Object以及从ItemsSource中选择的Item对象的Id属性值:


注意:
  • 如果在EditValue的List Object实例中添加值或从中删除值,则编辑器将不会选择/取消选择相应的项目。 而是使用所需的一组值创建一个新的List Object实例,并在EditValue中使用它;
  • 当您未在ItemSource中定义ValueMember并使用复杂对象*时,EditValue的List Object中的值应来自编辑器的ItemsSource。 在上面的示例中,如果要在代码中设置SelectedValues,则需要使用Items集合中的Item实例将其设置为List Object:SelectedValues = new List<object>() { Items[0], Items[2], Items[4] };否则,编辑器将无法确定应从源中选择哪些对象。
在GridControl单元格中的使用
要为某个GridColumn指定in-place编辑器,请使用我们在此帮助主题中描述的方法:In-place Editors,编辑器的EditValue与您在GridColumn中定义的数据项属性相关联:将列绑定到数据源字段。
在编辑器中启用多选时,它在其EditValue中使用List Object,但是FieldName不支持编辑集合属性, 这就是为什么您将无法在下面的GridColumn单元格中编辑SelectedValues属性的原因:
public class GridDataItem {...public List<Object> SelectedValues { get; set; }...}<dxg:GridColumn FieldName="SelectedValues" ...><dxg:GridColumn.EditSettings><dxe:ComboBoxEditSettings ...><dxe:ComboBoxEditSettings.StyleSettings><dxe:CheckedComboBoxStyleSettings/></dxe:ComboBoxEditSettings.StyleSettings></dxe:ComboBoxEditSettings></dxg:GridColumn.EditSettings></dxg:GridColumn>
在这种情况下启用编辑使用以下方法:
1. 在GridColumn中使用GridControl的Binding属性。
您还需要在绑定表达式中将Mode设置为TwoWay,以便在使用Binding属性时启用编辑:
<dxg:GridColumn Binding="{Binding Path=SelectedValues, Mode=TwoWay}" ...><dxg:GridColumn.EditSettings><dxe:ComboBoxEditSettings ...><dxe:ComboBoxEditSettings.StyleSettings><dxe:CheckedComboBoxStyleSettings/></dxe:ComboBoxEditSettings.StyleSettings></dxe:ComboBoxEditSettings></dxg:GridColumn.EditSettings></dxg:GridColumn>
2. 将基础数据项的属性类型更改为Object:

public class GridDataItem {...public Object SelectedValues { get; set; }...}<dxg:GridColumn FieldName="SelectedValues" ...><dxg:GridColumn.EditSettings><dxe:ComboBoxEditSettings ...><dxe:ComboBoxEditSettings.StyleSettings><dxe:CheckedComboBoxStyleSettings/></dxe:ComboBoxEditSettings.StyleSettings></dxe:ComboBoxEditSettings></dxg:GridColumn.EditSettings></dxg:GridColumn>
工控课堂 www.gkket.com

0

主题

382

回帖

1640

积分

高级会员

积分
1640
发表于 2021-4-28 22:35:19 | 显示全部楼层
我顶,我顶,我顶顶顶
工控课堂 www.gkket.com

0

主题

101

回帖

363

积分

注册会员

积分
363
发表于 2021-4-30 03:20:51 | 显示全部楼层
感恩无私的分享与奉献
工控课堂 www.gkket.com

0

主题

98

回帖

218

积分

注册会员

积分
218
发表于 2025-11-12 16:04:00 | 显示全部楼层
学到了学到了,这波分享太实用啦!
工控课堂 www.gkket.com

0

主题

102

回帖

154

积分

新手上路

积分
154
发表于 2025-11-12 17:27:27 | 显示全部楼层
原来还有这种操作,长见识了!
工控课堂 www.gkket.com

0

主题

78

回帖

121

积分

新手上路

积分
121
发表于 2025-11-12 17:36:57 | 显示全部楼层
已转发给朋友,一起感受这份快乐~
工控课堂 www.gkket.com

0

主题

89

回帖

233

积分

注册会员

积分
233
发表于 2025-11-12 18:03:10 | 显示全部楼层
占个楼慢慢看,先马克一下
楼主辛苦啦,期待下一篇分享
工控课堂 www.gkket.com

0

主题

165

回帖

396

积分

注册会员

积分
396
发表于 2025-11-12 18:16:23 | 显示全部楼层
理性围观,感觉大家说的都有道理~
工控课堂 www.gkket.com

0

主题

111

回帖

169

积分

新手上路

积分
169
发表于 2025-11-14 13:41:29 | 显示全部楼层
蹲一波同款,有没有姐妹 / 兄弟推荐?
工控课堂 www.gkket.com

0

主题

73

回帖

111

积分

新手上路

积分
111
发表于 2025-11-14 15:03:35 | 显示全部楼层
谁懂啊!这内容我能循环看十遍
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 19:23 , Processed in 0.130280 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表