将控件绑定到键值对的动态集合
Posted
技术标签:
【中文标题】将控件绑定到键值对的动态集合【英文标题】:Bind control to dynamic collection of key-value pairs 【发布时间】:2014-02-04 11:52:18 【问题描述】:我有一个提供许多键值对的网络服务。集合是巨大的,可用的密钥随着时间的推移而变化。我的目标是能够在 Visual Studio 2013 或 Blend 中使用设计模式下的属性窗口(或 XAML 中的智能感知)绑定到此集合。这当然需要在设计模式期间以某种方式初始化服务客户端对象以连接到服务并将键公开为可绑定属性。
我一直在搜索“ObjectDataSource”,但我的问题是我无法动态更改此对象的属性。
我应该选择什么类型的对象作为我的数据上下文? 如何在设计模式下填充它?
任何关于如何实施的想法或建议都会很棒。
【问题讨论】:
【参考方案1】:您可以将数据上下文设置为任何对象 - 如果
对象实现 INotifyPropertyChanged (http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx)
或者是可观察的(如 ObservableCollection (http://msdn.microsoft.com/en-us/library/ms668604(v=vs.110).aspx))。
如果您的目标是创建可观察字典,请查看此帖子:http://blogs.microsoft.co.il/shimmy/2010/12/26/observabledictionarylttkey-tvaluegt-c/
对象数据提供者也可以将其数据源设置为任何对象 - 如果对象如上所述,则将发生动态更新。此外,您可以在 xaml 中以声明方式设置 objectDataSource 的值 - 但这似乎不是您想要做的事情。 注意:您不会更改对象数据源的属性 - 您会更改它为您包装的对象。
如果您希望能够控制列表之类的选定项目(有点像 Winforms BindingSource),请查看 ICollectionView (http://msdn.microsoft.com/en-us/library/system.componentmodel.icollectionview(v=vs.110).aspx),它可以通过包装您的实际数据源 (相同的可观察规则适用于获取动态更新)使用 CollectionView(参见http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource.getdefaultview(v=vs.110).aspx)
所以 - 要回答您的其余问题,一种解决方案是创建一个可观察对象的可观察集合(包装您的键值对)并将其设置为您的数据上下文(或将其设置为您的 objectDataProvider 的源,并绑定您的相应的 Xaml。这不是唯一的方法,但快速 google 会向您显示其他方法。
编辑设计模式 对于设计时数据 - 查看使用设计模式标志 - 示例如下:http://www.arrangeactassert.com/how-to-use-designdata-to-populate-controls-with-design-time-data-in-silverlight-and-wpf/
(Silverlight 设计时属性)列表:http://msdn.microsoft.com/en-us/library/ff602277%28v=vs.95%29.aspx
我从来没有真正尝试过设计时的东西,所以这就是我的全部!
Hth.
【讨论】:
嗨 Jay,我了解这在运行时是如何工作的,但我的问题是我想在 Visual Studio“设计模式”中使用键/值对填充我的 ObservableCollection。我希望能够在 WPF 编辑器/属性面板中的键中进行选择。 @Chrille 用一些设计时数据绑定链接更新了我的答案——这是我从未尝试过的东西——所以希望这能为你指明正确的方向。以上是关于将控件绑定到键值对的动态集合的主要内容,如果未能解决你的问题,请参考以下文章