【发布时间】:2017-01-04 23:04:18
【问题描述】:
我有两个集合,一个用于 Book 对象,一个用于 BookViewModel 对象。 当我从 BookCollection 中删除 Book 对象时,会触发 CollectionChanged 事件,以便 BookViewModelCollection 可以删除它的 BookViewModel 版本的书。所以这里是绑定到事件的委托函数。
BookViewModelCollection.cs
private void ModelCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
{
if (syncDisabled == false)
{
syncDisabled = true;
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (var book in e.NewItems.OfType<Book>().Select(v => new BookViewModel(v)))
{
this.Add(book);
}
break;
case NotifyCollectionChangedAction.Remove:
foreach (var book in e.OldItems.OfType<Book>().Select(v => new BookViewModel(v)))
{
this.Remove(book);
}
break;
case NotifyCollectionChangedAction.Reset:
this.Clear();
break;
}
syncDisabled = false;
}
}
也许从 Book 转换到 BookViewModel 时出错?代码正在执行,但 Remove 方法返回 false 并且对象仍在集合中,尽管两个对象上的数据相同。 BookViewModel 包含一个 Book 类型的对象,构造函数只执行以下操作:
BookViewModel.cs
public BookViewModel(Book b)
{
this.Book = b;
}
Book 是设置 Book 的局部变量的属性。
注意:另一方面,当 BookCollectionViewModel 发生更改时更新 BookCollection 可以使用相同的技术完全正常。
我希望任何人都可以帮助我。如果您需要更多/其他信息,请告诉我。我也可以在 Github 上上传文件。
最好的问候
【问题讨论】:
-
用一个值引用它(与你删除的书相同)并在循环中使用它
标签: c# wpf mvvm collections