有个需要,在ComboBoxEdit中选择多个值,并且要求可以直接在后面添加新的值。
开始的时候绑定列表,设置DisplayMember,不能修改。
然后绑定List<string>,不设置DisplayMember,可以修改,但如果再次显示下拉框的时候,上面的值显示为:System.Collections.Generic.List`1[System.Object]
后发现当有修改选择后的值时,显示下拉框不会变,于是计划在收起popup时,在其值的后面加上一个 ";" ,刚好可以用于分隔新增加的。
XAML:
<dxlc:LayoutItem Label="实验方法:" Height="30"> <dxe:ComboBoxEdit x:Name="checkedComboBox" NullText="选择试验方法,添加新方法以 ; 分开" IsTextEditable="True" ItemsSource="{Binding Testmethod}" EditValue="{Binding SelectedTestmethod}" PopupClosed="checkedComboBox_PopupClosed" ShowCustomItems="True"> <dxe:ComboBoxEdit.StyleSettings> <dxe:CheckedComboBoxStyleSettings /> </dxe:ComboBoxEdit.StyleSettings> </dxe:ComboBoxEdit> </dxlc:LayoutItem>
XAML.cs
public static List<string> ConvertToDesiredType(object list) { List<string> returnList = new List<string>(); var type = list.GetType(); foreach (var item in (IEnumerable<dynamic>)list) { returnList.Add(item.ToString()); } return returnList; } private void checkedComboBox_PopupClosed(object sender, DevExpress.Xpf.Editors.ClosePopupEventArgs e) { if (e.EditValue == null) return; var type = e.EditValue.GetType(); if (type.Name.ToString().ToLower() == "string") { return; } var li = ConvertToDesiredType(e.EditValue); string edit = string.Empty; if (li != null) { for (int i = 0; i < li.Count; i++) { edit += li[i] + ";"; } } checkedComboBox.EditValue = edit; }
上面的ConvertToDesiredType方法,出自于:https://www.csdn.net/tags/MtjaggxsNzA0MTktYmxvZwO0O0OO0O0O.html
效果:
缺点:下拉框出现后,不能勾选已选择的项目,如果此时点 OK ,上面的值会清空。