我有一个ListView
绑定到一个视图模型,该模型在一个简单的示例应用程序中包含ObservableCollection
。
public class ViewModel : INotifyPropertyChanged
{
public ViewModel(){}
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<Item> _items;
public ObservableCollection<Item> Items
{
get
{
return this._items;
}
set
{
if (value != this._items)
{
this._items = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Items"));
}
}
}
}
public class Item
{
public string Name;
}
以下函数绑定到ListView的SelectionChanged事件
private void ItemListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
model.Items.Add(new Item { Name = "added item" });
model.Items = new ObservableCollection<Item> { new Item { Name = "new item 1" }};
}
当事件触发时,这应该发生
ObservableCollection
ObservableCollection
设置为新集合[单项,“新项目1”] 实际发生的事情:
ObservableCollection
设置为新收藏[单项,“新项目1”] 任何人都可以解释为什么这些发生在错误的顺序?
答案 0 :(得分:2)
任何人都可以解释为什么这些发生在错误的顺序?
我的猜测是他们没有发生错误(逆转)的顺序,但追加发生了两次。执行
model.Items = ... ;
在这些相同项目的SelectionChanged中非常大胆。它将再次触发SelectionChanged,并且只因为Selection保持为none(索引-1)而不进入无限循环。
答案 1 :(得分:0)
可观察的集合不需要inotify,试试这个:
public class ViewModel : INotifyPropertyChanged
{
public ViewModel(){}
public ObservableCollection<Item> Items ;
}