凝霜若雪

博客园 首页 新随笔 联系 订阅 管理

有个需要,在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  ,上面的值会清空。

 

posted on 2022-04-29 16:01  顺易  阅读(1294)  评论(0编辑  收藏  举报