MVVM DevComboBox嵌入CheckBox的显示问题

Posted airforce094

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVVM DevComboBox嵌入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刷新操作即可。

以上是关于MVVM DevComboBox嵌入CheckBox的显示问题的主要内容,如果未能解决你的问题,请参考以下文章

《Android构建MVVM》系列 之 MVVM架构快速入门

[WPF] 使用 MVVM Toolkit 构建 MVVM 程序

MVVM Light和MVVM有什么区别?

Android中具有干净架构的mvvm和没有干净架构的mvvm有啥区别?

mvvm框架和mvc有啥不同

MVVM