代码改变世界

Syncfusion 复选框 ComboBoxAdv

  stoneniqiu  阅读(687)  评论(0编辑  收藏  举报

    XAML:

    

 <syncfusion:GridTemplateColumn.EditTemplate>
                                            <DataTemplate DataType="viewModel:CustomerViewModel" >
                                                <syncfusion:ComboBoxAdv ItemsSource="{x:Static viewModel:RecordStatusModel.RecordStatusItem}" DropDownOpened="ComboBoxAdvStatus_DropDownOpened" DropDownClosed="ComboBoxAdvStatus_DropDownClosed"
                                                AllowMultiSelect="True">
</syncfusion:ComboBoxAdv> </DataTemplate> </syncfusion:GridTemplateColumn.EditTemplate>

   1。绑定数据源。一个静态的List<string>即可。

   2.关键的两个事件:DropDownOpened和DropDownClosed。 即打开和关闭。在复选框打开的时候初始化,关闭的时候处理用户的选择。

  

复制代码
  /// <summary>
        /// 报警级别复选框
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ComboBoxAdvStatus_DropDownOpened(object sender, EventArgs e)
        {
            var cbatmp = (ComboBoxAdv)sender;
            var alarmtypeselect = new ObservableCollection<object>();
            var targetuser = CustomersDatagrid.SelectedItem as CustomerViewModel;
            if (targetuser != null)
            {
                var liststr = RecordStatusModel.AlarmStatusToStrList(targetuser.RecordTypeFlags);
                foreach (var str in liststr)
                {
                    alarmtypeselect.Add(str);
                }
                cbatmp.SelectedItems = alarmtypeselect;
            }
        }

        /// <summary>
        /// 报警类型复选框
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ComboBoxAdvStatus_DropDownClosed(object sender, EventArgs e)
        {
            ComboBoxAdv cbatmp = (ComboBoxAdv)sender;
            var tmp = cbatmp.SelectedItems.ToList<string>();
            var targetuser = CustomersDatagrid.SelectedItem as CustomerViewModel;
            var flag = RecordStatusModel.AlarmStrListToEnum(tmp);
            if (targetuser != null) targetuser.RecordTypeFlags = flag;
            alarmHandleViewModel.Save();
        }
复制代码
RecordStatusModel:
复制代码
static class RecordStatusModel
    {
       private static List<string> _recordStatusItem;
       private static Dictionary<AlarmStatusFlags, string> _alarmStatusDictionary;

       public static List<string> RecordStatusItem
       {
           get { return _recordStatusItem??(_recordStatusItem=new List<string>()
           {
                "报警",
                "应答",
                "恢复",
                "移除",
           }); }
       }

       public static Dictionary<AlarmStatusFlags, string> AlarmStatusDictionary
       {
           get
           {
               return _alarmStatusDictionary ?? (_alarmStatusDictionary = new Dictionary<AlarmStatusFlags, string>()
               {
                {AlarmStatusFlags.Alarm, "报警"},
                {AlarmStatusFlags.Acked, "应答"},
                {AlarmStatusFlags.Recover, "恢复"},
                {AlarmStatusFlags.Remove, "移除"},
               });
           }
       }

       public static List<string> AlarmStatusToStrList(AlarmStatusFlags flags)
       {
           return (from dic in AlarmStatusDictionary where (int)(dic.Key & flags) > 0 select dic.Value).ToList();
       }

       public static AlarmStatusFlags AlarmStrListToEnum(IEnumerable<string> list)
       {
           return (from str in list from dic in AlarmStatusDictionary where dic.Value == str select dic)
               .Aggregate<KeyValuePair<AlarmStatusFlags, string>, AlarmStatusFlags>(0, (current, dic) => current | dic.Key);
       }
    }
View Code
复制代码

 

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
历史上的今天:
2013-11-18 BugTracker 功能说明(有图有真相)
点击右上角即可分享
微信分享提示