![](/img/trans.png)
[英]WPF Combobox when SelectedValue is 0 then the Combobox should not select
[英]WPF SelectedValue in a combobox when it is databound to a table
我是wpf和数据绑定的新手,对此我一无所知。
所以基本上我有一个EyeColors和EyeColorIds表。 眼睛颜色ID是人员表的外键。
我创建了一个绑定到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对象的属性。 我希望将人的眼睛颜色属性编辑为组合框的选定值。
当您没有提供所有相关信息时,这有点困难,所以我将不得不假设一些事情。
<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
属性-这对于您想要的内容至关重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.