我有一个WPF组合框,其中ItemsSource
是ObservableCollection<User>
,而User
是string Name
和bool IsChecked
。
我也有
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked}" Width="20" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
,它很好地在每个名称前显示复选框,并允许我选中/取消选中用户。
我需要的是使组合框选定的项目,以显示不是选定的用户,但所有选中的用户名用逗号分隔,理想的(如果结果字符串太长)与省略号在中间,即"爱丽丝,巴特...喵,约翰"。
可能吗?
2条答案
按热度按时间mznpcxlj1#
我本打算建议使用exceed复选框
https://github.com/xceedsoftware/wpftoolkit/wiki/CheckComboBox
但是我注意到它不再是免费的商业应用了,你可以根据他们的代码构建你自己的东西。
xaml也会在那个repo中。
tvz2xvvm2#
实现起来有点棘手,但肯定可以做到。
首先,你需要用TextBlock替换下拉栏/按钮,所以你需要修改控件的模板。将编辑光标放在父ComboBox声明内的任何地方,这样控件就出现在右下角的属性面板中。在属性中,找到底部的杂项-〉模板。然后点击右边的小向下箭头,选择“转换为新资源”。这将模板化控件,以便您可以开始编辑它。
接下来,在ControlTemplate中找到ToggleButton的ContentPresenter,然后修改它的Content绑定,使其指向视图模型中的一个属性,我将其命名为
Names
:下一个更改是向CheckBox命令属性添加一个名为“NamesChangedCommand”的绑定,每当用户更改CheckBox的状态时都会调用该绑定:
然后回到视图模型中,你所要做的就是执行这个命令,并让它生成新的名字列表,下面是你在MVVM工具包中的实现方法:
结果: