我想让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();
}
}
}
答案 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()
修改会影响您将来需要的所有案例,我建议您不要这样做。
答案 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, 埃里克,