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

时间:2015-08-11 03:38:39

标签: c# wpf observablecollection

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

  1. 有没有办法直接在集合中更改它?
  2. 快速有效的方法是什么?
  3. 我尝试过:使用 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 
    }
    

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

2 个答案:

答案 0 :(得分:1)

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

transpose : List (List a) -> Maybe (List (List a))
transpose ll =
  case ll of
    ((x::xs)::xss) ->
      let
        heads =
          xss
          |> List.map List.head
          |> insideout

        tails =
          xss
          |> List.map List.tail
          |> insideout
      in
        (x #^ heads) ^#^ ((xs #^ tails) `Maybe.andThen` transpose)

    _ ->
      if ll == List.filter List.isEmpty ll then
        Just []
      else
        Nothing

----- Some helper functions: -----


mCons : a -> Maybe (List a) -> Maybe (List a)
mCons v ml = Maybe.map ((::) v) ml

v #^ ml = mCons v ml

-- this is really a Maybe.map2 (::) mv ml
-- but the standard library doesn't provide map2 :(
m2Cons : Maybe a -> Maybe (List a) -> Maybe (List a)
m2Cons mv ml =
  case (mv,ml) of
    (Just v, Just l) -> Just (v :: l)
    _ -> Nothing

mv ^#^ ml = m2Cons mv ml

-- list of justs to just of list
insideout : List (Maybe a) -> Maybe (List a)
insideout l =
  case l of
    [] -> Just []
    ((Just v) :: tail) -> v #^ insideout tail
    (Nothing :: _) -> Nothing

答案 1 :(得分:0)

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

它应该像ObservableCollection一样工作,除了它也是一本字典。因此,您可以创建ObservableDictionary<Int,ClsComponent>

要替换值,只需调用

Components[myId] = destComp