C# 如何刷新绑定到WPF数据网格的可观察集合?
我第一次尝试这个:C# 如何刷新绑定到WPF数据网格的可观察集合?,c#,wpf,datagrid,observablecollection,C#,Wpf,Datagrid,Observablecollection,我第一次尝试这个: 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); }); 我
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);
});
我怎样才能做得更好?我希望在收到信号器通知时能够向集合中添加新用户,而不是执行另一个相对昂贵的获取并重新创建集合。删除可用于集合中的实际对象。OP中的contains正在尝试比较一个最初不在列表中的对象。尝试使用某个标识符查找所需对象,如果找到,则替换该对象。否则,将其添加到列表中
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);
}
});
删除操作不起作用,因为来自服务的对象与集合中已有的对象不同。contains方法返回true?。
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);
}
});