WPF:ComboBox显示“(namespace)。(classname)”而不是数据

时间:2009-02-02 15:02:38

标签: wpf xaml data-binding combobox

我想让XAML中的ComboBox绑定到后面代码中的List个自定义对象集合。

目前每个条目ComboBox的{​​{1}}列表是dpwpf.Contact

我需要在XAML中输入什么来告诉它列出,例如LastName + FirstName?

我知道它类似于{namespace}.{classname},但我无法得到它。

XAML:

{Binding Path=... Value=...}

代码背后:

<Window x:Class="dpwpf.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <StackPanel>
            <TextBlock Text="Select the contact:"/>
            <ComboBox Name="theContactList"/>
        </StackPanel>
    </StackPanel>
</Window>

答案:

namespace dpwpf
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            StoreDB db = new StoreDB();
            List<Contact> contacts = db.GetContacts()
            theContactList.ItemsSource = contacts.ToList();
        }
    }
}

4 个答案:

答案 0 :(得分:8)

您可以覆盖ToString的{​​{1}}方法,也可以在WPF中定义Contact

DataTemplate

这允许您定义xmlns:dpwpf="... namespace of dpwpf" <Window.Resources> <DataTemplate DataType="{x:Type dpwpf:Contact}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding LastName}"> <TextBlock Text=" "> <TextBlock Text="{Binding FirstName}"> </StackPanel> </DataTemplate> </Window.Resources> 对象在窗口中的任何位置的显示方式。如果您希望将其限制为Contact,则可以将ComboBox仅添加到DataTemplate资源。

答案 1 :(得分:6)

只需在ComboBox标签(xaml代码)

中添加
TextSearch.TextPath ="Title"

ToString()修改会影响您将来需要的所有案例,我建议您不要这样做。

看那个例子: http://simplesample.site90.com/wpf_combobox.php

答案 2 :(得分:4)

绑定机制正在做什么是在绑定的类型上调用ToString()。因为我猜你没有覆盖ToString(),所以只有namespace.type而不是有用的东西。

正如叛逆所说,您可以使用DisplayMember告诉绑定使用该名称的属性作为显示值,或者您可以覆盖ToString(),如下所示,以显示您的自定义属性。

public void Contact
{
 public string FirstName { get; set; }
 public override string ToString()
 {
   return FirstName; 
 }
}

答案 3 :(得分:3)

你需要使用DisplayMember =“TheValue”

您可以在XAML或CLR中添加它 还要注意你在cose中的绑定而不是通过XAML。 我认为这与你的一个明显问题有关。 它通过ObjectDataProvider实现绑定 使用该示例并在XAML中添加DisplayMemeber =“memeber”

HTH, 埃里克,