我对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对象属性。我希望编辑人物的眼睛颜色属性为组合框的选定值。
答案 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}
。这甚至有用吗?我假设您的tblEyeColorViewSource
是CollectionViewSource
,所以代码不应该是:
DataContext="{Binding Source={StaticResource tblEyeColorViewSource}}"
无论哪种方式,如果您将ComboBox.ItemsSource
设置为{Binding}
,那么这意味着您可能没有选定项目绑定到ComboBox.SelectedValue
属性 - 这对您想要的内容至关重要