不使用 LINQ 更新 ObservableCollection 中的单个项目

Update Single Item in the ObservableCollection without LINQ

我正在尝试在网络上创建 Components 运行 的列表。我正在尝试获取 ObservableCollection 中的所有组件。 ObservableCollection<ClsComponent> 现在我的问题是,如果集合中的某个组件发生更改/修改,我如何才能将其反映到我的 ObservableCollection 组件

  1. 有没有办法直接在集合本身中更改它?
  2. 快速有效的方法是什么?

我试过:使用 LINQ 更改它:在集合中找到 Component 并更改它?

var CompFound = Components.FirstOrDefault(x=>x.Id == myId);
Components.Remove(CompFound);
Components.Add(UpdatedComp);

我非常确定应该有更优化的方法来执行此操作。请提出建议。

编辑

我正在尝试在可以获取 Source ComponentDestination Component 参数的函数中编写代码。函数看起来像这样

public void UpdateComponent(ClsComponent SourceComp, ClsComponent DestComp)
{
  //do something here 
}

函数执行后,我想用目标组件替换源组件。

最有效的方法之一是使用字典。有 ObservableDictionary 的实现,它会为您提供 Observable 行为,同时允许对对象进行基于键的快速访问。 检查此 Whosebug question。它包括微软的

它应该像 ObservableCollection 一样工作,除了它还是一个字典。所以你可以创建 ObservableDictionary<Int,ClsComponent>

要替换值只需调用

Components[myId] = destComp

我相信这可能对您有用。我相信您可能正在寻找这个

Components.Insert(Components.IndexOf(SourceComp), DestComp);
Components.Remove(SourceComp);