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刷新操作即可。

  • 相关阅读:
    程序员面试笔试宝典学习记录(三)(数据库相关知识)
    程序员面试笔试宝典学习记录(二)(程序设计相关知识)
    程序员面试笔试宝典学习记录(一)(常见面试笔试题目)
    浮点型数据在内存中的存储【转】
    docker compose网络设置
    Docker的Ubuntu16.04容器如何汉化
    Docker的centos7容器中如何安装mongodb
    用Java代码实现拦截区域网数据包
    wireshark 抓包分析 TCPIP协议的握手
    如何通过代理方式访问网络
  • 原文地址:https://www.cnblogs.com/lovecsharp094/p/6917826.html
Copyright © 2011-2022 走看看