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

本文关键字:数据绑定 WPF SelectedValue 组合 | 更新日期: 2023-09-27 18:27:16

我对wpf和数据绑定有点陌生,我一直在做这件事。

所以基本上我有一张EyeColors和EyeColorId的表格。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对象属性。我希望要编辑的人的眼睛颜色属性是组合框的选定值。

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

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

<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属性——这对于您想要的内容至关重要。