【问题标题】:ViewModel collection bindings in SilverlightSilverlight 中的 ViewModel 集合绑定
【发布时间】:2009-03-22 20:43:03
【问题描述】:

我有两个列表框,一个包含所有项目,一个包含活动项目。

我有一个包含所有项目的 observablecollection 绑定到包含所有项目的列表框。我将什么绑定到另一个列表框?我是否需要创建一个新集合并整理出活动的集合。当我添加一个新的活动项目时,我需要同时添加到这两个集合中。

我正在寻找的行为是将一个新项目添加到包含所有项目的集合中,以便更新两个列表框。有可能做这样的事情吗?

【问题讨论】:

    标签: silverlight collections listbox


    【解决方案1】:

    如果您有两个集合,您可以订阅主集合上的 CollectionChanged 事件并使用通知来同步另一个列表。

    【讨论】:

      【解决方案2】:

      您应该可以使用CollectionView 执行此操作。 CollectionView 封装了排序和过滤。

      在您的情况下,如果您创建一个 CollectionView 过滤掉主集合上的非活动项目并将第二个列表绑定到该视图,那么您应该很高兴。

      编辑:如果我阅读完整标题并意识到他在谈论 Silverlight... Silverlight 没有 ICollectionView 的公共实现,也没有 CollectionViewSource,而且只有 Datagrid 使用该接口。 投票赞成的人应该取消它,这不是问题的好答案。

      我猜回到绘图板。现在我会说我会有两个集合,并在第一个(完整的)上收听事件 - 添加/删除活动项目时从第二个添加/删除 - 在添加/删除的项目上添加/删除 PropertyChanged 处理程序 和 - 当 Active 属性发生变化时,添加/删除第二个集合。 它很混乱,但是当您需要通过谓词过滤的集合时,它可能足够可打包以重用它。

      【讨论】:

      • Silverlight 中没有用于实例化 CollectionView 的 CollectionViewSource。
      • 是的,我刚刚意识到这一点。我错过了标题中写着“silverlight”的部分(顶部的大字母......)。对此感到抱歉。
      【解决方案3】:

      我会使用两个集合,主列表和活动项目列表。 然后订阅主列表上的collection changed事件,处理所有actions

      此外,您需要向项目对象添加一个事件,以便您可以处理项目从活动变为非活动的情况,反之亦然,因为集合更改事件仅在集合更改时触发,而不是在它包含的内容发生更改时触发变化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        • 2016-10-11
        • 2010-11-08
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        相关资源
        最近更新 更多