gpt4 book ai didi

c# - 如何刷新绑定(bind)到 WPF DataGrid 的 Observable 集合?

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:08 25 4
gpt4 key购买 nike

我首先尝试了这个:

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 并重新创建集合。

最佳答案

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

关于c# - 如何刷新绑定(bind)到 WPF DataGrid 的 Observable 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com