我有两个列表框,一个包含所有项目,另一个只包含活动项目。
我有一个observablecollection,其中包含所有项目的所有项目都绑定到列表框。我将什么绑定到其他列表框?我是否需要创建一个新的集合并整理出有效的集合。当我添加一个新的活动项目时,我需要添加到两个集合中。
我正在寻找的行为是将所有项目的新项目添加到集合中,以便更新两个列表框。有可能做那样的事吗?
答案 0 :(得分:3)
如果您有两个集合,则可以在主集合上订阅CollectionChanged事件,并使用通知同步另一个列表。
答案 1 :(得分:2)
你应该能够用CollectionView进行表达。 CollectionView封装了排序和过滤。
在这种情况下,如果您创建一个CollectionView来过滤掉主集合上的非活动项目并将第二个列表绑定到该视图,那么您应该很高兴。
编辑:如果我只阅读完整的标题并意识到他在谈论Silverlight ...... Silverlight没有ICollectionView的公共实现,也没有CollectionViewSource,只有Datagrid才能使用该接口。 无论是谁投票都应该取消它,这不是一个很好的答案。我想回到绘图板。现在我会说我会有两个集合,并听取第一个(完整的)事件 - 添加/删除活动项目时,从第二个添加/删除 - 在添加/删除的项目上添加/删除PropertyChanged处理程序 和 - 当Active属性发生更改时,向/从第二个集合添加/删除。 它很麻烦,但是当你需要一个由谓词过滤的集合时,它可能是可打包的,足以重用它。
答案 2 :(得分:0)
我会使用两个集合,即主列表和活动项目列表。 然后订阅主列表上的collection changed事件,处理所有actions
此外,您需要向项目对象添加一个事件,以便您可以处理项目从活动变为非活动时的情况,反之亦然,因为集合更改事件仅在集合更改时触发,而不是在集合包含的内容时触发变化。