0

我对 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 对象属性。我希望要编辑的人的眼睛颜色属性是组合框的选定值。

4

1 回答 1

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 属性的确切名称,无论其名称如何。This means that when a value is selected, we want to receive the value from this property... it's like the DisplayMemberPathproperty, but that one specifies which property will be displayed when a value is selected.

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

我刚刚注意到你已经设置了你的ComboBox.DataContextto{StaticResource tblEyeColorViewSource}和它的ComboBox.ItemsSourceto {Binding}。这还有效吗?我假设您tblEyeColorViewSource是 a CollectionViewSource,所以该代码不应该是:

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

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

于 2013-08-12T14:26:45.273 回答