Silverlight组合框selectedvalue字符串属性绑定

时间:2016-06-30 02:07:12

标签: c# wpf silverlight combobox

我有一个带有如下项目的组合框:

{[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"

我可以在这做什么?

1 个答案:

答案 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属性。

要了解其他两个,您应该先了解SelectedItemSelectedItem将从ComboBox返回当前选定的Employee对象。您还可以为SelectedItem分配一个Employee对象,以在ComboBox中设置当前选择。

SelectedValuePath指向Id,这意味着您可以使用SelectedValue获取当前所选员工的ID。您还可以通过将SelectedValue设置为Id(我们假设它将出现在Employees列表中)来设置ComboBox中当前选定的Employee。