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

  • 相关阅读:
    AtCoder Beginner Contest 167
    AtCoder Beginner Contest 166
    AtCoder Beginner Contest 165
    AtCoder Beginner Contest 164
    AtCoder Beginner Contest 163
    AtCoder Beginner Contest 162
    AtCoder Beginner Contest 161
    AtCoder Beginner Contest 160
    AtCoder Beginner Contest 159
    自定义Mybatis自动生成代码规则
  • 原文地址:https://www.cnblogs.com/lovecsharp094/p/6917826.html
Copyright © 2011-2022 走看看