Edw*_*uay 9 data-binding wpf xaml combobox
我想让我ComboBox的XAML绑定到我List后面的代码中的自定义对象集合.
目前ComboBox每个条目的列表dpwpf.Contact都是我的{namespace}.{classname}.
我需要在XAML中输入什么来告诉它列出,例如LastName + FirstName?
我知道它是类似{Binding Path=... Value=...}但我无法得到它.
XAML:
<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>
Run Code Online (Sandbox Code Playgroud)
代码背后:
namespace dpwpf
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
StoreDB db = new StoreDB();
List<Contact> contacts = db.GetContacts()
theContactList.ItemsSource = contacts.ToList();
}
}
}
Run Code Online (Sandbox Code Playgroud)
<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"
xmlns:local="clr-namespace:dpwpf">
<Window.Resources>
<DataTemplate DataType="{x:Type local:Contact}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding LastName}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding FirstName}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<StackPanel>
<StackPanel Margin="10">
<TextBlock Text="Contact Name:" Foreground="#555"/>
<TextBox Name="theName"/>
</StackPanel>
<StackPanel>
<TextBlock Text="Select the contact:"/>
<ComboBox Name="theContactList"/>
</StackPanel>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
您可以覆盖ToString方法Contact,也可以DataTemplate在WPF中定义.
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>
Run Code Online (Sandbox Code Playgroud)
这允许您定义Contact对象在窗口中的任何位置的显示方式.如果要将此限制为,则ComboBox可以将DataTemplatejust 添加到ComboBox资源中.
绑定机制正在做的是对正在绑定的类型调用 ToString()。因为我猜你不会重写 ToString() ,所以它只会使用 namespace.type 而不是有用的东西。
正如叛逆所说,您可以使用 DisplayMember 告诉绑定使用该名称的属性作为显示值,或者您可以重写 ToString() 如下所示以显示您的自定义属性。
public void Contact
{
public string FirstName { get; set; }
public override string ToString()
{
return FirstName;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
只需在你的ComboBox标签中添加它(xaml代码)
TextSearch.TextPath ="Title"
Run Code Online (Sandbox Code Playgroud)
ToString() 修改会影响您将来需要的所有案例,我不建议您这样做.
请参阅该示例:http: //simplesample.site90.com/wpf_combobox.php