Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何刷新绑定到WPF数据网格的可观察集合?_C#_Wpf_Datagrid_Observablecollection - Fatal编程技术网

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);
    }
});