首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ItemsSource绑定到"proxy“集合。如何获取DataContext?

问将ItemsSource绑定到"proxy“集合。如何获取DataContext?
EN

Stack Overflow用户
提问于 2009-07-15 20:49:40
回答 4查看 1.3K关注 0票数 1

我们有一个包含多个列表框和组合框的Silverlight应用程序,这些列表框和组合框显示的数据排序不正确,我需要解决这个问题。它们的大多数ItemSource属性都是通过XAML设置的。它们的DataContext不能直接在控件上设置,而是在父级上设置。因此,我不能轻易地在后面的代码中将"OrderBy“赋值给ItemSource或DataContext赋值,因为该赋值可能并不显式存在。

所以我有了创建一个“代理”集合的想法。代理集合将获取原始ItemSource并公开排序后的版本。然后我就可以将这个转换为:

代码语言:javascript
复制
<ListBox ItemsSource="{Binding}"/>

如下所示:

代码语言:javascript
复制
<ListBox>
    <ListBox.ItemsSource>
        <my:ProxyCollection Source="{Binding}" SortBy="Name"/>
    </ListBox.ItemsSource>
</ListBox>

不是太寒酸!但是,由于ProxyCollection不是ListBox的子类,列表框的DataContext不会传播给它,绑定也不会神奇地工作。如果我手动设置ProxyCollection集合的DataContext,效果会很好。但是,如果我无论如何都要手动设置DataContext,我也可以删除代理集合,手动设置列表框的DataContext,添加一个"OrderBy“。

关于如何在proxy集合上自动设置列表框的DataContext,您有什么想法吗?或者其他的天才点子?

EN

回答 4

Stack Overflow用户

发布于 2009-07-29 11:47:52

我偶然遇到了一个非常类似的问题。我想将参数从一个组合框级联到后续的组合框中,设计目标相同,不需要代码...

我的解决方案很难说是优雅的,但它的效果很好:)

基本上我有一个SharedDataContext控件,它有一个直接绑定到datacontext的“值”DP。

然后,我使用共享数据上下文上的附加属性来允许注册其他元素。

这使得XAML看起来像这样

代码语言:javascript
复制
<my:SharedDataContext Value="{Binding}" />
<ComboBox>
    <ComboBox.ItemsSource>
       <my:ProxyCollection my:SharedDataContext.Register="1" />    
    </ComboBox.ItemsSource>
</ComboBox>

在SharedDataContext中,我有一个静态的框架元素集合。

当注册附加属性被“更改”时,我捕获PropertyChangedCallback并将发送方(在本例中为ProxyCollection实例)添加到集合中。

当数据绑定发生变化(以及SharedDataContext的Value属性)时,我枚举整个集合并设置数据绑定。

这是一项正在进行中的工作,我对它还不是百分之百满意(像清理收藏这样的事情我有点担心),但我希望它能给你一些想法。

HTH

西蒙

票数 1
EN

Stack Overflow用户

发布于 2009-07-15 20:56:36

鉴于数据上下文是在父级设置的,如果列表框绑定到设置为数据上下文的类的属性,则该属性将公开为get / set,并且您可以有意地以排序的方式从该属性输出数据。

这并不理想,因为在MVVM类型的场景中,这将规定排序顺序以非常视图消费VM。

票数 0
EN

Stack Overflow用户

发布于 2009-07-29 15:43:49

我最终从不同的途径解决了我的问题。例如,我创建了一个从标准ComboBox派生的"SortedComboBox“控件。它定义了自己的ItemSource,当它的ItemsSource改变时,它对项目进行排序,然后在基类上设置ItemsSource。它工作得足够好,只需对XAML进行少量更改即可获得所需的效果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1133960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档