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 程序