WPF中ComboBox的绑定

3
我是wpf的初学者。实际上,我正在为从数据库接收数据的ComboBox设置样式。在没有样式的情况下,ComboBox可以正常工作。
我已经在样式表中(例如资源字典)编辑了ComboboxItem控件的ControlTemplate
如果该Style应用于静态数据的ComboBox,则该样式可以正常工作。但是,如果该样式应用于具有动态数据的ComboBox(在这种情况下是从数据库绑定),则项目列表仅返回对象(显示的项目类似于“Class.Method.Property”),而不是我需要显示的属性内容。
我已经尝试了所有方法,并阅读了有关xaml样式和ComboBox模板的所有互联网内容,但我无法解决问题。
我的ContentPresenter看起来像这样,它返回数据绑定的对象:
<ContentPresenter
        ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
        Content="{TemplateBinding ContentControl.Content}"/>

有人可以帮我吗?

2个回答

4
由于WPF不知道如何显示您的类,因此会显示“Class.Method.Property”。您需要为您的类创建一个DataTemplate。
除非您真的需要,否则我不会像您在示例中所做的那样深入模板。
如果您有一个数据绑定的ComboBox,并且您只想显示绑定对象的属性,则可以执行以下操作:
 <ComboBox ItemsSource="{Binding PersonList}"
                  DisplayMemberPath="FullName" />

如果你想要更高级的显示效果,可以设置ItemTemplate。

<ComboBox ItemsSource="{Binding PersonList}">
            <ComboBox.ItemTemplate>
                <DataTemplate DataType="{x:Type local:Person}">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding FullName}" />
                        <TextBlock Text="{Binding Age}" />
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

4

我最近遇到了同样的问题,为了解决它,我的内容呈现器现在看起来像这样:

<ContentPresenter                            
    Content="{TemplateBinding ComboBox.SelectionBoxItem}"
    ContentTemplate="{TemplateBinding ComboBox.SelectionBoxItemTemplate}"
    ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" /> 

我的问题和你的一样,就是缺少ContentTemplateSelector。如果下拉框显示不正确,可以在ComboBoxItem样式中将内容呈现器留空(<ContentPresenter />),它就会正常显示。


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