Silverlight中的ViewModel集合绑定

时间:2009-03-22 20:43:03

标签: silverlight collections listbox

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

你应该能够用CollectionView进行表达。 CollectionView封装了排序和过滤。

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

编辑:如果我只阅读完整的标题并意识到他在谈论Silverlight ...... Silverlight没有ICollectionView的公共实现,也没有CollectionViewSource,只有Datagrid才能使用该接口。 无论是谁投票都应该取消它,这不是一个很好的答案。

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

答案 2 :(得分:0)

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

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