我將ComboBox
的ItemsSource
綁定到ObservableCollection<MyClass>
。在代碼中,我更改集合(例如,編輯MyClass.Name
屬性)。WPF組合框下拉(數據綁定)值不變
問題:如果ComboBox
下拉框中沒有反映更改,但是當我從下拉列表中將項目清除後,它將在ComboBox
的選定項目框中正確顯示。
發生了什麼事? :)
PS MyClass的有INotifyPropertyChanged的實施
我將ComboBox
的ItemsSource
綁定到ObservableCollection<MyClass>
。在代碼中,我更改集合(例如,編輯MyClass.Name
屬性)。WPF組合框下拉(數據綁定)值不變
問題:如果ComboBox
下拉框中沒有反映更改,但是當我從下拉列表中將項目清除後,它將在ComboBox
的選定項目框中正確顯示。
發生了什麼事? :)
PS MyClass的有INotifyPropertyChanged的實施
我懷疑的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));
}
}
}
我很抱歉,這是在這裏甚至一個問題。問題是我忘了在DataTemplate中設置綁定路徑,它使用ToString方法來顯示元素。這搞砸了綁定。
所以請記住 - 如果你重寫ToString經常檢查您不要在綁定:)
感謝您的回答使用它,但(一如既往),問題是在我的假人頭部。 再次感謝您的建議! – Jefim 2010-04-09 08:22:57