我将ItemsSource
的{{1}}绑定到ComboBox
。在代码中,我更改了集合(例如,编辑ObservableCollection<MyClass>
属性)。
问题:如果MyClass.Name
,更改不会反映在下拉框中,但是当我从下拉列表中选择项目时,它会在ComboBox
的所选项目框中正确显示。< / p>
发生了什么事? :)
PS MyClass已实施INotifyPropertyChanged
答案 0 :(得分: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));
}
}
}
答案 1 :(得分:0)
对不起,这甚至是一个问题。问题是我忘了在DataTemplate中设置绑定路径,并且它使用ToString方法来显示元素。这搞砸了绑定。
请记住 - 如果您覆盖ToString,请始终检查您是否在绑定中使用它:)