Combobox没有使用SelectedValue WPF进行初始化

时间:2015-04-19 23:08:55

标签: wpf listview data-binding combobox

让我的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最初没有填写正确的文字并且是空白的?

enter image description here

修改 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>

2 个答案:

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