当它被数据绑定到表时,组合框中的WPF SelectedValue

时间:2013-08-12 13:21:55

标签: c# wpf database

我对wpf和数据绑定有点新意,我坚持这个。

所以基本上我有一张EyeColors和EyeColorIds表。 Eye Color Id是Person表的外键。

我创建了一个绑定到EyeColor表的组合框,用可能的眼睛颜色填充它。然而,当用户编辑某人时,我希望已经选择了该人的眼睛颜色。我怎么能这样做?

 <ComboBox
     DataContext="{StaticResource tblEyeColorViewSource}"
     Height="23"
    HorizontalAlignment="Left" 
        Margin="95,125,0,0" 
        Name="EColorBox" 
        VerticalAlignment="Top" 
        Width="120" 
        DisplayMemberPath="EyeColor"
        ItemsSource="{Binding}" />

这是我对于组合框的xaml。在构建窗口时获得特定人的眼睛颜色。

因此,在创建编辑窗口之前,我从数据网格中获取数据并制作人物对象

然后我构建编辑窗口

  public AddEditForm(PeopleManagerController pmc, Person p)
    {
        controller = pmc;
        InitializeComponent();
        personToAE = p;

        FnameText.DataContext = personToAE;
        LnameText.DataContext = personToAE;
        datePicker1.DataContext = personToAE;
        datePicker1.Text = personToAE.DateOfBirth;
        AddEditButton.Content = "Edit";
    }

然后,当用户单击编辑按钮时,它会将要编辑的人员发送到控制器类以进行SQL事务。

至于xaml,我只是创建控件并将它们绑定到person对象属性。我希望编辑人物的眼睛颜色属性为组合框的选定值。

1 个答案:

答案 0 :(得分:0)

当你没有提供所有相关信息时有点困难,所以我将不得不假设一些事情。

<ComboBox DataContext="{StaticResource tblEyeColorViewSource}" Height="23"
HorizontalAlignment="Left" Margin="95,125,0,0" Name="EColorBox" VerticalAlignment="Top" 
Width="120" DisplayMemberPath="EyeColor" ItemsSource="{Binding}" SelectedValuePath="Id" 
SelectedValue={Binding CurrentPerson.EyeColourId}" />

请注意,SelectedValuePath属性必须设置为tblEyeColorViewSource数据对象中EyeColourId属性的确切名称,无论可能调用什么。这意味着当选择一个值时,我们希望从此属性接收值...它就像DisplayMemberPath属性,但是当一个值指定哪个属性显示时被选中。

现在必须将SelectedValue属性设置为引用当前Person对象我们要设置的属性的对象。

我刚刚注意到您已将ComboBox.DataContext设置为{StaticResource tblEyeColorViewSource},将ComboBox.ItemsSource设置为{Binding}。这甚至有用吗?我假设您的tblEyeColorViewSourceCollectionViewSource,所以代码不应该是:

DataContext="{Binding Source={StaticResource tblEyeColorViewSource}}" 

无论哪种方式,如果您将ComboBox.ItemsSource设置为{Binding},那么这意味着您可能没有选定项目绑定到ComboBox.SelectedValue属性 - 这对您想要的内容至关重要