WPF - 在使用DataTemplate时,通过键入选择ComboBox的值

3

我在WPF中有一个下拉框,它绑定到另一个对象的某个属性。因为我需要显示该对象的两个属性,所以我在下拉框内部使用了DataTemplate。现在当下拉框处于焦点状态时,我无法通过输入几个起始字母来选择某个值(如果没有DataTemplate,则可以)。

<ComboBox Height="23" HorizontalAlignment="Left" Margin="104,14,0,0" Name="tipDokumentaCombo" VerticalAlignment="Top" Width="241" TabIndex="0" ItemsSource="{Binding Path=TipoviDokumenta}" SelectedValue="{Binding Path=Potvrda.Tip}" SelectedValuePath="Tip" SelectionChanged="tipDokumentaCombo_SelectionChanged">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Tip}" />
                        <TextBlock Text=" (" />
                        <TextBlock Text="{Binding Path=OpisDokumenta}" />
                        <TextBlock Text=")" />
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
3个回答

3

TextSearch.TextPath设置为要搜索的属性。

更新
因为上述解决方案似乎对您不起作用,请尝试手动为容器设置搜索文本:

<ComboBox.ItemContainerStyle>    
   <Style TargetType="{x:Type ComboBoxItem}">        
          <Setter Property="TextSearch.Text" Value="{Binding Tip}" />            
    </Style>
</ComboBox.ItemContainerStyle>

你能给我一个例子看看吗?谢谢。 - mersadk
@HLC 这个方法也不起作用 :( 有没有其他方法可以在不使用DataTemplate的情况下打印这两个值呢? - mersadk
@mersadk:这很奇怪,我看不出什么问题。我经常使用它,从未遇到过问题。您是否知道TextSearch.TextPath不是绑定,而是属性的名称?声明必须为:TextSearch.TextPath="Tip"。对于请求的替代方案:最简单的方法是覆盖BusinessObject的ToString()方法,并返回已连接的字符串。另一种尝试是使用MultiBinding并仅使用一个TextBlock,但我怀疑这是否有帮助。 - HCL
@HLC 我知道这一点,并且我以这种方式使用它,但是它没有帮助。 - mersadk
@HLC 最终找到了解决方案。我添加了 <ComboBox ... IsTextSearchEnabled="True" TextSearch.TextPath="Tip">,然后它就起作用了。我真的不知道为什么第一次没有起作用。谢谢。 - mersadk

0

根据评论讨论,可行的解决方案是在ComboBox标签中添加IsTextSearchEnabled="True"TextSearch.TextPath="Tip"

例如(重新编写问题代码示例-删除一些对减少复杂性没有用处的代码)

<ComboBox Name="tipDokumentaCombo" TabIndex="0" ItemsSource="{Binding Path=TipoviDokumenta}" SelectedValue="{Binding Path=Potvrda.Tip}" SelectedValuePath="Tip" SelectionChanged="tipDokumentaCombo_SelectionChanged" IsTextSearchEnabled="True" TextSearch.TextPath="Tip">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Tip}" />
                <TextBlock Text=" (" />
                <TextBlock Text="{Binding Path=OpisDokumenta}" />
                <TextBlock Text=")" />
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

免责声明:本回答非原作者所写,是根据现有评论编写而成。应该归功于@mersadk在评论中发布了大部分细节。我已经测试并验证了它在我的(类似的)环境中可以正常工作 - 问题解决。


0

在应用查找的属性上添加DisplayMemberPath。

即使存在itemtemplate,设置DisplayMemberPath对我也起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接