zoukankan      html  css  js  c++  java
  • 【MVVM Dev】ComboBox嵌入CheckBox的显示问题

    一、前言

           在ComboBox中嵌入若干个CheckBox时,当我们勾选一些CheckBox,ComboBox会显示相应的勾选项。

           例如:CheckBox项有A,B,C   那么勾选这三项,ComboBox会显示A,B,C

          

           但有时候我们会发现,点击CheckBox时,ComboBox会出现对象的名称,而不是我们想要的text

           例如:CheckBox有三项A,B,C 它们的类型都是XModel类型,Text分别为A,B,C。 有时候ComboBox会显示成"XModel"

         

           为了解决这个问题,网上有这么几个方法,大多是重写ComboBox:

           1. https://www.codeproject.com/articles/563862/multi-select-combobox-in-wpf

           2. http://blog.sina.com.cn/s/blog_7f83849b010164yp.html

           但是这些方法太麻烦

    二、示例

    View部分:

     <ComboBox Grid.Row="2" 
    Grid.Column="1" Margin="0" x:Name="checkedComboBox" IsEditable="True" IsReadOnly="True" ItemsSource="{Binding ModelTypes}" Text="{Binding Text,Mode=OneWay}" VerticalAlignment="Bottom" > <ComboBox.ItemTemplate> <DataTemplate DataType="{x:Type projectSetting:ModelType}"> <CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>


    View的后台部分:

     checkedComboBox.DropDownClosed += CheckedComboBox_DropDownClosed;
    
    
      private void CheckedComboBox_DropDownClosed(object sender, System.EventArgs e)
      {
         BSViewModel vm = DataContext as BSViewModel;
         vm.UpdateText();
      }

    ViewModel部分:

      public void UpdateText()
      {
            switch (CheckedRootModelTypes.Count)
            {
                    case 0:
                        Text = "<无>";
                        break;
                    case 1:
                        Text = CheckedRootModelTypes.First().Name;
                        break;
                    default:
                        Text = string.Join(";",
                            CheckedRootModelTypes.Select(x => x.Name).ToArray());
                        break;
             }
    
            RaisePropertyChanged(() => Text);
      }

    也就是说在ComboBox的DropDownClose中实现ViewModel中的Text刷新操作即可。

  • 相关阅读:
    课堂作业
    Visual Studio Code for mac 设置中文
    git分支与主干合并操作
    git常用命令
    js事件冒泡和事件委托
    JS中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?
    常见的解决浏览器兼容性问题的方式有哪些
    vue问题大全
    浅析前端工程化
    前端中常见的数据结构小结
  • 原文地址:https://www.cnblogs.com/lovecsharp094/p/6917826.html
Copyright © 2011-2022 走看看