2010-04-09 151 views
1

我將ComboBoxItemsSource綁定到ObservableCollection<MyClass>。在代碼中,我更改集合(例如,編輯MyClass.Name屬性)。WPF組合框下拉(數據綁定)值不變

問題:如果ComboBox下拉框中沒有反映更改,但是當我從下拉列表中將項目清除後,它將在ComboBox的選定項目框中正確顯示。

發生了什麼事? :)

PS MyClass的有INotifyPropertyChanged的實施

回答

1

我懷疑的inotify ...是不是正確實施?我只是測試:

 l = new ObservableCollection<MyClass>(); 
    l.Add(new MyClass() { Name = "A" }); 
    l.Add(new MyClass() { Name = "B" }); 
    l.Add(new MyClass() { Name = "C" }); 
    cmb.ItemsSource = l; 

,然後點擊一個按鈕:

 l[0].Name = "Robert"; 

的作品就好了。我的組合框:

<ComboBox x:Name="cmb" SelectedValuePath="Name" DisplayMemberPath="Name" /> 

終於,我的課:

class MyClass : INotifyPropertyChanged 
{ 
    private string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 

     } 
     set 
     { 
      string oldval = _name; 
      _name = value; 
      if (!string.Equals(oldval, _name)) 
      { 
      OnPropertyChanged("Name"); 
      } 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(string name) 
    { 
     var ev = PropertyChanged; 
     if (ev != null) 
     { 
      ev.Invoke(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 
+0

感謝您的回答使用它,但(一如既往),問題是在我的假人頭部。 再次感謝您的建議! – Jefim 2010-04-09 08:22:57

0

我很抱歉,這是在這裏甚至一個問題。問題是我忘了在DataTemplate中設置綁定路徑,它使用ToString方法來顯示元素。這搞砸了綁定。

所以請記住 - 如果你重寫ToString經常檢查您不要在綁定:)