码迷,mamicode.com
首页 > 其他好文 > 详细

【MVVM Dev】ComboBox嵌入CheckBox的显示问题

时间:2017-05-29 13:34:46      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:rgs   重写   object   点击   而不是   sina   table   tps   roo   

一、前言

       在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 Dev】ComboBox嵌入CheckBox的显示问题

标签:rgs   重写   object   点击   而不是   sina   table   tps   roo   

原文地址:http://www.cnblogs.com/lovecsharp094/p/6917826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!