【发布时间】:2009-07-15 20:49:39
【问题描述】:
我们有一个 Silverlight 应用程序,其中包含多个列表框和组合框,这些列表框和组合框显示的数据排序不正确,我需要修复它。它们的大部分 ItemSource 属性都是通过 XAML 设置的。它们的 DataContext 可能不会直接在控件上设置,而是在父级上设置。所以我不能轻易地在后面代码中的 ItemSource 或 DataContext 分配上加上“OrderBy”,因为该分配可能不明确存在。
所以我有了创建一个“代理”集合的想法。代理集合将获取原始 ItemSource 并公开排序版本。然后我就可以转换它了:
<ListBox ItemsSource="{Binding}"/>
进入这个:
<ListBox>
<ListBox.ItemsSource>
<my:ProxyCollection Source="{Binding}" SortBy="Name"/>
</ListBox.ItemsSource>
</ListBox>
不要太破旧!但是,由于 ProxyCollection 不是 ListBox 的子项,因此 ListBox 的 DataContext 不会传播给它,并且绑定不会神奇地起作用。如果我手动设置 ProxyCollection 集合的 DataContext 效果很好。但是,如果我必须手动设置 DataContext,我也可以删除代理集合并手动设置 Listbox 的 DataContext,添加一个“OrderBy”。
那么关于如何在代理集合上自动获取 ListBox 的 DataContext 集有什么想法吗?还是有其他天才的想法?
【问题讨论】:
标签: silverlight data-binding silverlight-2.0 datacontext itemssource