WPF调试错误输出System.Windows.Data Error 25。

7

我有一个自定义的ComboBox,它工作得很好。它放置在一个用户控件中,并绑定到一个数据结构上。我使用DisplayMemberPath来仅显示Combobox TextBox中的一个元素。ComboBox样式来自MSDN并被多次使用。因此,这里不显示它。

<UserControl x:Class="wpf.projext1.MyComboBox"
         x:Name="MyControl"
         ...
    <ComboBox Style="{StaticResource ComboBoxStyle}"
                  Text="{Binding ElementName=MyControl, Path=Text}"
                  IsEditable="True"
                  IsTextSearchEnabled="False"
                  StaysOpenOnEdit="True"
                  ItemsSource="{Binding ElementName=MyControl, Path=MyItemsSource}"
                  DisplayMemberPath="Name"
    </ComboBox

我在输出窗口中得到以下令人烦恼的错误信息:
System.Windows.Data Error: 25 : Both 'ContentTemplate' and 'ContentTemplateSelector' are set;  'ContentTemplateSelector' will be ignored. ComboBoxItem:'ComboBoxItem' (Name='')

如果我省略了


DisplayMemberPath="Name"

在错误25方面没有调试输出显示。但我绝对需要DiplayMemberPath="Name"!你有什么想法来解决这个问题吗?


在您的ComboBoxStyle中,您可能为组合框设置了ItemTemplate。因此会出现此错误。 - Rohit Vats
3个回答

19

你无法同时设置 DisplayMemberPathItemTemplate

DisplayMemberPath 用于告诉 ItemsControl 在显示对象时要显示哪个属性。如果您已经传递了自定义的 ItemTemplate,则设置此字段是没有意义的,因为您可以选择在该 ItemTemplate 中如何显示对象。

由于 MSDN 的默认 Combobox 样式也设置了 ItemTemplate,这很可能是错误的原因。


我有一个ItemTemplate,用于显示ComboboxItems。它还应该用于显示editbox的内容吗? - deafjeff
1
当我设置DisplayMemberPath时,组合框的工作方式就像它应该的那样。当我不设置它时,编辑框会显示默认的(类名)字符串。因此,设置DisplayMemberPath是否真的有用,就像为ComboboxItems设置Itemtemplate一样。所以,您能否解释一下如何将它们放在一起,就像您建议的那样? - deafjeff
我必须补充说明的是,编辑框不会像在Itemtemplate中定义的ComboboxItem那样显示。它只会显示“Name”成员。ItemTemplate为每个项目显示“Name”、“Age”、“Adress”等内容。 - deafjeff

9
解决:无论TextSearch是否启用,都使用TextSearch附加属性!
TextSearch.TextPath="Name"

0
应该注意使用 TextSearch.TextPath="Name",而不是 DisplayMemberPath="Name"

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