我有一个带有如下项目的组合框:
{[1, US]}
{[2, UK]}
我的组合框将显示Value
。我的问题是我无法设置我的组合框的SelectedValue
属性。
<ComboBox Name="cbSource" Grid.Row="1" Grid.Column="3"
ItemsSource="{Binding Datas.Countries, Mode=OneWay}"
SelectedValue="{Binding CurrentObject.Country, Mode=TwoWay}"
DisplayMemberPath="Value" SelectedValuePath="Key"></ComboBox>
现在我的CurrentObject.Country
是一个字符串属性,其值为UK
。我也在下面试过这个,但没有运气。
DisplayMemberPath="Value" SelectedValuePath="Value"
我可以在这做什么?
答案 0 :(得分:1)
使用键值对无法实现您的行为。请参阅下面的示例。 只需创建一个具有2个属性的类,一个用于键,一个用于值。然后将此类的集合绑定为itemssource,并将selectedvalue绑定到字符串属性。即Datas.Countries是该类的集合。
<ComboBox Name="cbSource" Grid.Row="1" Grid.Column="3"
ItemsSource="{Binding Datas.Countries, Mode=OneWay}"
SelectedValue="{Binding SomePropertyToHoldKeyValue, Mode=TwoWay}"
DisplayMemberPath="Value" SelectedValuePath="Key"></ComboBox>
我认为我们可以通过一个例子更好地理解SelectedItem,SelectedValue,DisplayMemberPath和SelectedValuePath之间的区别。请参阅此课程:
public class Employee
{
public int Id;
public string Name;
}
以及以下xaml:
<ComboBox ItemsSource="{Binding Source={StaticResource Employees}}"
DisplayMemberPath="Name"
SelectedValuePath="Id"/>
DisplayMemberPath
指向Name属性,因此ComboBox中显示的值和下拉列表中包含的Employee条目将是Employee对象的Name属性。
要了解其他两个,您应该先了解SelectedItem
。 SelectedItem
将从ComboBox返回当前选定的Employee对象。您还可以为SelectedItem
分配一个Employee对象,以在ComboBox中设置当前选择。
SelectedValuePath
指向Id,这意味着您可以使用SelectedValue
获取当前所选员工的ID。您还可以通过将SelectedValue
设置为Id(我们假设它将出现在Employees列表中)来设置ComboBox中当前选定的Employee。