WPF ComboBox绑定对象列表如何实现下拉双值展示选中仅显示扩展名
可以实现,最直接的方案是利用WPF ComboBox自带的SelectionBoxItemTemplate属性,分别定义下拉列表项和选中后展示内容的模板,修改后的XAML代码如下:
<ComboBox ItemsSource="{Binding imageFormats}" x:Name="ComboBoxImages"> <!-- 下拉列表内每个选项的展示模板,同时显示扩展名和描述 --> <ComboBox.ItemTemplate> <DataTemplate> <DockPanel> <TextBlock DockPanel.Dock="Left" Text="{Binding Extension}" /> <TextBlock DockPanel.Dock="Left" Text=" - " /> <TextBlock DockPanel.Dock="Right" Text="{Binding Description}" /> </DockPanel> </DataTemplate> </ComboBox.ItemTemplate> <!-- 选中后在ComboBox输入区域的展示模板,仅显示扩展名 --> <ComboBox.SelectionBoxItemTemplate> <DataTemplate> <TextBlock Text="{Binding Extension}" /> </DataTemplate> </ComboBox.SelectionBoxItemTemplate> </ComboBox>
注意你现有代码存在重复绑定的问题:XAML中已经通过ItemsSource="{Binding imageFormats}"绑定了数据源,后台构造函数又给ComboBoxImages.ItemsSource赋值,两者保留一个即可,避免出现覆盖冲突。
如果你不想额外加模板,也可以通过重写Model的ToString方法实现:
public class ImageFormatModel { public string Extension { get; set; } public string Description { get; set; } // 选中时ComboBox默认会调用ToString方法展示内容 public override string ToString() { return Extension; } }
该方案不需要修改XAML的ItemTemplate配置,即可直接满足需求,缺点是展示逻辑和Model层耦合,灵活度低于第一种方案。
内容的提问来源于stack exchange,提问作者SideSky
相关产品推荐
相关产品推荐

