WPF 绑定(bind)到代理

标签 wpf proxy binding objectdataprovider typedescriptionprovider

我有许多集合类实现了它们自己的自定义更新通知。将这些通知转换为代理类中的 INotifyCollectionChanged 实现应该非常容易。

INotifyPropertyChanged 已经处理好了;这个问题只是关于收集代理。

因此,我正在寻找一种创建相对容易从 XAML 使用的代理的方法。对于子集合尤其如此。自定义集合类是库的一部分,不能修改(也不能从中派生)。也不可能用 INotifyCollectionChanged 兼容的等效项替换集合类型,因为数据更新代码不在我的控制范围内。

我更喜欢也适用于 SL 的解决方案,但这不是严格要求。

到目前为止,我认为以下方法是可行的:

  • 定义一个 TypeDescriptionProvider 为添加 Proxy 属性的集合类注册。这允许绑定(bind)路径点到代理中。从 XAML 的角度来看,此解决方案似乎是最简单的,但与 SL 不兼容。
  • 定义一个创建代理的值转换器。这将与 XAML 端的更多工作一起工作。它应该适用于 SL。但是,如果路径上需要多个值转换,则可能需要“中间”视觉元素来保存值转换器结果。

我查看了 ObjectDataProvider,但我认为它不能用于这种情况(代理创建方法必须对容器中的对象类型具有通用性)。

关于这两种方法中哪一种更好或任何其他方法有什么建议吗?

最佳答案

Paul Stovell 创建了一个可编辑的集合适配器,它本身可能无法满足您的需求,但它应该为您提供一个创建合适的适配器/代理的良好起点。

http://www.paulstovell.com/editable-collection-adapter

关于WPF 绑定(bind)到代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6540144/

相关文章:

c# - Linq 查询以列形式返回国家/地区,以行形式返回城市并在单元格中计数

c# - 是否可以仅在加载所有模块后才显示 shell?

Java 代理身份验证

c# - Xamarin - 现在已过时的 ParentView 的替代方案

python - 使用 Selenium Chrome 的代理 SOCKS 5 身份验证

google-chrome - Chrome 扩展 - 以编程方式绕过代理

wpf 组合框项目源 Collection View 源与直接绑定(bind)

c# - BindableBase 与 INotifyChanged

c# - WPF WebBrowser控件如何禁用IE的快捷键?

c# - 如何自动生成WPF Event -> IObservable的扩展方法库