WPF中的Databind Combobox

时间:2011-08-01 21:37:45

标签: wpf data-binding combobox

我是第一次尝试在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";
}

...

enter image description here

4 个答案:

答案 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;
}