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

教授

我首先尝试了这个:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章