让我的Combobox与当前的选定项目一起初始化时出现问题。
ClinicList返回ObservableCollection<Clinic>
<ComboBox ItemsSource="{Binding Source={StaticResource ClinicList}}"
DisplayMemberPath="Name" SelectedItem="{Binding SelectedClinic,
UpdateSourceTrigger=PropertyChanged}"></ComboBox>
我的ComboBox位于绑定到员工的列表视图中。员工可以分配多个诊所。
public class Employee{
...
public ObservableCollection<ClinicView> EmployeeClinics { get; set; }
}
public class ClinicView:INotifyPropertyChanged {
private Clinic selectedClinic;
public Clinic SelectedClinic {
get { return selectedClinic; }
set {
selectedClinic = value;
OnPropertyChanged("SelectedClinic");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName) {
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) {
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
public class Clinic{
public int ClinicId{get;set;}
public string Name {get;set;
}
组合框在首次加载时显示为空白,并且每个员工的分配的诊所数量正确。组合框下拉列表中包含正确的诊所,当我选择一个时,它会替换空白的组合框文本并正确更新员工。
我的问题是为什么Combobox最初没有填写正确的文字并且是空白的?
修改 ClinicList通过window.resources中的ODP设置
public static ObservableCollection<Clinic> GetClinicList() {
//gets list of clinics from db with ID
}
<ObjectDataProvider MethodName="GetClinicList"
ObjectType="{x:Type local:MappingGenerators}"
x:Key="ClinicList">
</ObjectDataProvider>
答案 0 :(得分:1)
发现这篇文章是一个救生员。
https://rachel53461.wordpress.com/2011/08/20/comboboxs-selecteditem-not-displaying/
以下是关键段落:
问题很简单:默认情况下,WPF将SelectedItem与每个比较 ItemsSource中的item by reference,意思是除非 SelectedItem指向与ItemsSource相同的内存项 item,它将决定ItemsSource中不存在该项 所以没有选择任何项目。
要解决此问题,您可以使用ComboBox的SelectedValue 和SelectedValuePath按Value而不是by设置SelectedItem 项目
答案 1 :(得分:0)
你的问题是ClinicView类没有实现INotifyPropertyChanged,因此SelectedClinic属性不会触发PropertyChanged事件,这使绑定知道值已经改变。
您可以详细了解MVVM pattern here。