我是第一次尝试在WPF中对组合框进行数据绑定,但我无法实现它。
下面的图片显示了我的代码,请您告诉我我错过了什么?我只想要xaml中的图形内容。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Patient p = new Patient();
this.cbPatient.DataContext = p.SelfListAll();
this.cbPatient.DisplayMemberPath = "Name";
this.cbPatient.SelectedValuePath = "PatientIDInternal";
}
...
答案 0 :(得分:2)
简短说明:只需对您的XAML进行以下更改:
<ComboBox ItemsSource="{Binding Path=patientList}" />
然后,在您的Window_Loaded
事件处理程序中,只需添加
this.DataContext = this
然后创建一个名为patientList
的名为ObservableCollection<Patient>
的新成员。
长解释:
您没有绑定设置。你需要通过XAML创建一个这样的:
<ComboBox ItemsSource="{Binding Path=patientList}" />
然后,组合框将在设置为DataContext
的对象上查找名为“patientList”的成员或属性。我建议对patientList
使用ObservableCollection。
或者,要在代码中创建一个,您可以按照以下示例进行操作:
http://msdn.microsoft.com/en-us/library/ms752347.aspx#specifying_the_binding_source
Binding myBinding = new Binding("patientList");
myBinding.DataContext = someObject; //whatever object has 'patientList' as a member
mycombobox.SetBinding(ComboBox.ItemsSourceProperty, myBinding);
这将在mycombobox
ComboBox上设置绑定,路径为patientList
,DataContext为someObject
。换句话说,mycombobox
将显示someObject.patientList
的内容(理想情况下是一些ObservableCollection,以便对集合的更新通知绑定更新)。
答案 1 :(得分:0)
您需要实际添加绑定,例如:
Binding binding = new Binding();
binding.Source = MySourceObject;
binding.Path = new PropertyPath("MyPropertyPath");
binding.Mode = BindingMode.OneWay;
BindingOperations.SetBinding(cbPatient, SomeDependencyProperty, binding);
答案 2 :(得分:0)
您需要相对于DataContext设置ItemsSource属性:
cbPatient.SetBinding(ItemsSourceProperty, new Binding());
修改强>
ComboBox的ItemsSource属性是应该指向要显示的项集合的属性。
您感兴趣的集合位于DataContext中。
Binding是一个对象,它跟踪集合的变化并将它们报告给ComboBox,其Path相对于DataContext中的对象。
因为Binding还需要知道ComboBox,所以使用静态SetBinding方法将ComboBox和Binding之间的连接联系起来。
在代码中,集合本身位于DataContext中,Path为空。
ItemsSource属性应指向患者的集合。因为Patient的集合已经在DataContext中,所以Binding的Path属性为空。
假设一个名为Hospital的类有两个属性:Patients和Docters(可能还有更多:Rooms,Appointments,...),并将ComboBox的DataContext设置为Hospital的实例。然后你必须将Binding的Path Property设置为“Patients”
现在,ComboBox将显示集合中的每个项目(患者)。要指定应如何显示单个患者,您需要设置ComboBox的ItemTemplate属性。
答案 3 :(得分:0)
好的,这是如何在WPF中填充组合框的答案。首先,感谢上面提出建议的所有人。我缺少的部分是我没有填充ItemsSource属性,而是填充DataContext属性。再次感谢大家的帮助。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Patient p = new Patient();
this.cbPatient.ItemsSource = p.SelfListAll();
this.cbPatient.DisplayMemberPath = "Name";
this.cbPatient.SelectedValuePath = "PatientIDInternal";
this.cbPatient.SelectedIndex = 0;
}