【问题标题】:WPF: Databinding a dictionary propertyWPF:数据绑定字典属性
【发布时间】:2010-08-30 21:39:10
【问题描述】:

我有一个带有字典类型属性的 UserControl,称为HighlightedDates。该属性包含一组日期,每个日期都有一个工具提示字符串,并且从代码设置时可以正常工作。

我想使用此标记将HighlightedDates 属性绑定到相同类型的视图模型属性 DatesWithNotes:

<MyControls:MyCalendar SelectedDate="{Binding SelectedDate}"
                       HighlightedDates="{Binding DatesWithNotes}" />

不幸的是,当我尝试这样做时遇到了这个异常:

不能在“DictionaryEntry”类型的“Value”属性上设置“Binding”。 “绑定”只能在 DependencyObject 的 DependencyProperty 上设置。

看起来 WPF 正在尝试绑定单个条目,而不是字典本身。

作为替代方案,我正在考虑让视图模型将添加到其字典中的每个新值推送到用户控件的字典中,这看起来非常笨拙。这让我想到了我的问题:有没有办法使这种绑定起作用?谢谢你的帮助。

【问题讨论】:

  • 我尝试复制这个(特别是字典部分),它似乎工作正常。基本上,我创建了一个带有 Dictionary 依赖属性的 UserControl,然后我创建了一个具有相同字典属性的 ViewModel。最后,我在一个 Window 中使用了 UserControl,将其 DataContext 设置为 ViewModel,并将 UserControl.Dictionary 属性绑定到 ViewModel.Dictionary 属性。它工作正常,我没有收到错误。所以我认为这个错误是由其他东西引发的。也许您可以向我们展示 UserControl 的定义?
  • 谢谢——我复制了你的测试,但我仍然得到同样的错误。我已经复制了下面的标记和代码。所以很明显,我做错了什么......

标签: wpf binding


【解决方案1】:

这个问题变得更有趣了。 Karmicpuppet 尝试使用一个简单的测试项目来重现该错误——请参阅上面的评论。他在他的测试中没有得到错误,但是当我运行相同的测试时我得到了它。

我已经阅读了很多关于数据绑定到字典对象的问题。在我的项目中,我进行了重构以消除字典并继续前进。我没有听到任何其他建议,所以我将结束这个问题。

【讨论】:

  • 您的视图模型正在公开MonthNotes,但您正在浏览MonthDatesMyDictionary="{Binding Path=MonthDates...
【解决方案2】:

VS2010 WPF 设计器中似乎存在一个错误,可能导致出现此错误消息,即使绑定在运行时工作正常。

【讨论】:

    【解决方案3】:

    尽管这已经是很老的问题了,但错误“不能在 'DictionaryEntry' 类型的 'Value' 属性上设置 'Binding'。'Binding' 只能在 DependencyObject 的 DependencyProperty 上设置。”可能会因为 DependencyProperty 未设置为 static 而被抛出。

    这是我偶尔会遇到的问题,只是注意到static 关键字丢失了。很容易被忽视,尤其是还有 readonly 关键字时。

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多