开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 6948|回复: 0

使用DevExpress WPF Data Editors时实现多选

[复制链接]

0

精华

8

贡献

1768

赞扬

特约版主

帖子
583
软币
4524
在线时间
275 小时
注册时间
2019-2-21
发表于 2020-7-7 09:35:07 | 显示全部楼层 |阅读模式
通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。
如何启用多重选择
默认情况下,ComboBoxEdit、LookUpEdit和ListBoxEdit编辑器使用单个选择。 要在这些编辑器中启用多个选择,您需要更改其操作模式 - 在其StyleSettings属性中使用相应的设置对象:
[XML] 纯文本查看 复制代码
<dxe:ComboBoxEdit ...>
<dxe:ComboBoxEdit.StyleSettings>
<dxe:CheckedComboBoxStyleSettings/>
</dxe:ComboBoxEdit.StyleSettings>
</dxe:ComboBoxEdit>
我们在以下帮助主题中描述了可用的设置对象:
注意:在In-Place模式下定义这些编辑器时,将使用ComboBoxEditSettings、LookUpEditSettings和ListBoxEditSettings对象,这些对象也具有StyleSettings属性:
[XML] 纯文本查看 复制代码
<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属性中使用):
[C#] 纯文本查看 复制代码
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
[XML] 纯文本查看 复制代码
<dxe:ListBoxEdit ItemsSource="{Binding Items}"
EditValue="{Binding SelectedValues}"
DisplayMember="Name">
<dxe:ListBoxEdit.StyleSettings>
<dxe:CheckedListBoxEditStyleSettings/>
</dxe:ListBoxEdit.StyleSettings>
</dxe:ListBoxEdit>
EditValue和SelectedValues属性将包含List Object以及从Items中选择的Item对象。

如果您定义ValueMember
[XML] 纯文本查看 复制代码
<dxe:ListBoxEdit ItemsSource="{Binding Items}"
EditValue="{Binding SelectedValues}"
ValueMember="Id"
DisplayMember="Name">
<dxe:ListBoxEdit.StyleSettings>
<dxe:CheckedListBoxEditStyleSettings/>
</dxe:ListBoxEdit.StyleSettings>
</dxe:ListBoxEdit>
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属性的原因:
[XML] 纯文本查看 复制代码
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属性时启用编辑:
[XML] 纯文本查看 复制代码
<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:
[XML] 纯文本查看 复制代码
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>
DevExpress技术交流群2:775869749      欢迎一起进群讨论

回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-11-22 08:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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