我希望我的用户能够从 WPF 中的 ComboBox 选择一个客户端(自定义对象)。 ComboBox 将按名字(字符串)和姓氏(字符串)显示所有客户。
所以基本上我的 ViewModel 公开了一个单一的客户端,它是用户将做出的选择,以及一个用于填充 ComboBox 的所有客户端的列表。 ComboBox 的声明如下所示:
<ComboBox Grid.Row="3" Grid.Column="1" Text="{Binding Client}" ItemsSource="{Binding Clients}" IsEditable="True">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
当然这不起作用,因为 Text 属性显示原始客户端(显示类型名称),如果用户键入名称,则无法将其转换为客户端。这似乎是一件非常简单的事情,但通过在线搜索我似乎找到了许多不同的解决方案:创建一个具有正确格式名称的包装器类型,使用值转换器,使用数据模板......我不熟悉所有那些 WPF 技术,所以请帮我找出最好的(希望是简单的!)解决方案。
谢谢!
最佳答案
还有一种更简单的方法可以做到这一点。正如您所说,XAML 绑定(bind)到对象的类型名称,这来自 ToString() 方法。这允许您覆盖该方法并返回所需的格式,而无需复杂的多重绑定(bind)。
protected override ToString()
{
return String.Format("{0} {1}", FirstName, LastName);
}
也可能是您使用的 Text
属性有误,您需要 SelectedItem?
关于c# - ComboBox - 从两个属性中选择对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8966499/