如何刷新绑定到WPF DataGrid的Observable集合?

时间:2016-12-03 16:53:09

标签: 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);
});

我只有一个用户来测试,但每次执行上面的代码时,该用户都会被添加到集合中。我添加了good,发现Remove无效。

现在,当我真的只想刷新它时重新创建集合:

Users = new ObservableCollection<UserDto>(await _service.Read());
OnPropertyChanged(nameof(Users));

我怎样才能更好地做到这一点?我希望能够在收到SignalR通知时将新用户添加到集合中,而不是执行另一个相对昂贵的Get并重新创建集合。

1 个答案:

答案 0 :(得分:1)

删除适用于集合中的实际对象。 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);
    }
});