我首先尝试了这个:
var users = await _service.Read();
var usersTemp = users as IList<UserDto> ?? users.ToList();
usersTemp.ToList().ForEach(u =>
{
if (usersTemp.Contains(u))
{
var good = Users.Remove(u);
}
Users.Add(u);
});
我只有一个用户要测试,但是每次执行上述代码时,都会将该用户添加到集合中。我添加后good
发现Remove
无法正常工作。
现在,当我实际上只想刷新集合时,就可以重新创建集合:
Users = new ObservableCollection<UserDto>(await _service.Read());
OnPropertyChanged(nameof(Users));
我该如何做得更好?我希望能够在收到SignalR通知时将新用户添加到集合中,而不是执行另一个相对昂贵的获取并重新创建集合。
Remove与集合中的实际对象一起使用。OP中的包含试图比较原始不在列表中的对象。尝试使用一些标识符找到所需的对象,然后替换找到的对象。否则将其添加到列表中。
usersTemp.ToList().ForEach(u => {
var user = Users.FirstOrDefault(x => x.ID == u.ID);
if (user != null) {//User already exists
var index = Users.IndexOf(user);//get its location in list
Users[index] = u;//replace it with new object
} else {
Users.Add(u);
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句