用于选定值和搜索功能的 wpf 组合框项目模板

Posted

技术标签:

【中文标题】用于选定值和搜索功能的 wpf 组合框项目模板【英文标题】:wpf combobox item template for the selected value and search functionality 【发布时间】:2012-04-18 13:49:04 【问题描述】:

我在我的应用程序中使用了一个组合框,我正在用类似这样的类来填充它:

namespace Foo.Bar
     public class Item
     
          public string lastName;
          public string firstName;
          public Foo theMeatyPart;
     

我可以使用 itemTamplate 用“lastName, firstName”填充下拉列表,但随后所选值显示为“Foo.Bar.Item”。如何将相同的模板应用到 selectedItem 并且在不覆盖 Item 的 ToString 方法的情况下让搜索功能正常工作?

这里是 xaml:

<Style x:Key="SearchComboStyle" TargetType="ComboBox">
                <Style.Setters>
                    <Setter Property="Width" Value="150"></Setter>
                </Style.Setters>
            </Style>
            <DataTemplate x:Key="SearchComboItemTemplate" >
                    <TextBlock DataContext="Binding">
                            <TextBlock.Text>
                              <MultiBinding StringFormat="0, 1">
                                <Binding Path="lastName"/>
                                <Binding Path="firstName"/>
                              </MultiBinding>
                            </TextBlock.Text>
                    </TextBlock>
            </DataTemplate>


<ComboBox  ItemTemplate="StaticResource SearchComboItemTemplate" Style="StaticResource SearchComboStyle" 
                    ItemsSource="Binding Path=PhysiciansList, RelativeSource=RelativeSource AncestorType=local:ExamViewerControl, AncestorLevel=1"      IsTextSearchEnabled="True" IsTextSearchCaseSensitive="False" IsEditable="True" TextSearch.TextPath="Person.LastName" />         

【问题讨论】:

【参考方案1】:

UPD:看来你需要设置SelectionBoxItemTemplate

您可以使用DisplayMemberPath 或TextSearch.TextPath 来启用搜索,而无需修改ToString()。

【讨论】:

哎呀。对不起。您使用哪种组合框?可以编辑吗? System.Windows.Controls.ComboBox .NET 4.0 AFAIK,您无法更改 ComboBox 可编辑部分中使用的 TextBox 的外观,即您无法应用 DataTemplate。 ComboBox 使用 DisplayMemberPath 或 TextSearch.Path 在嵌套的 TextBox 上设置内容。 我可以对 displaymemberpath 应用相同的多重绑定吗? 很遗憾没有。 WPF 在内部使用临时绑定到路径设置为 DisplayMemberPath(或 PathText)的项目。但是有几种方法可以帮助你。第一个是覆盖 ToString 或添加一个类似于 MultiBinding 的属性。第二个是为 Item 类创建一个视图模型,该类使用附加属性 DisplayValue 包装原始项目。第三个是将您的项目包装到 DependencyObject 中,您可以在其中附加 TextSearch.Text 属性。至于我,如果你不能修改 Item 类,第二种解决方案是最好的。

以上是关于用于选定值和搜索功能的 wpf 组合框项目模板的主要内容,如果未能解决你的问题,请参考以下文章

用于组合框模板的 WPF 高亮画笔

wpf的组合框中显示新的选定项后如何显示对话框?

WPF组合框值和显示文本

使用工具提示 WPF 在数据网格中填充组合框

使用 MVVM 重置组合框选定项目

WPF延迟选择中的组合框