尝试绑定此 ValueConverter 时出现“只能在 DependencyObject 的 DependencyProperty 上设置绑定”错误
Posted
技术标签:
【中文标题】尝试绑定此 ValueConverter 时出现“只能在 DependencyObject 的 DependencyProperty 上设置绑定”错误【英文标题】:"A binding can only be set on a DependencyProperty of a DependencyObject" error when attempting to bind this ValueConverter 【发布时间】:2019-05-02 03:37:05 【问题描述】:我有这门课:
public class AssetDescriptionLookupConverter : FrameworkElement, IValueConverter
public IEnumerable<T_AssetDescription> LookupList
get return (IEnumerable<T_AssetDescription>)GetValue(LookupListProperty);
set SetValue(LookupListProperty, value);
public static readonly DependencyProperty LookupListProperty =
DependencyProperty.Register("Lookup", typeof(IEnumerable<T_AssetDescription>),
typeof(AssetDescriptionLookupConverter));
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
T_AssetDescription description =
LookupList.FirstOrDefault(x => x.AssetDescriptionID.Equals(value));
if (description == null) return "";
return description.Item;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
return Binding.DoNothing;
当我尝试将它作为资源包含在我的 XAML 中时:
<local:AssetDescriptionLookupConverter
x:Key="assetDescriptionLookup"
LookupList="Binding AssetDescriptions" />
我在LookupList="Binding AssetDescriptions"
下看到一个红色波浪线,并显示错误消息
无法在“AssetDescriptionLookupConverter”类型的“LookupList”属性上设置“绑定”。 “绑定”只能在 DependencyObject 的 DependencyProperty 上设置。
这是为什么?我该如何解决?
【问题讨论】:
您正在注册“查找”属性...?应该是“LoopupList”。 我知道这很简单。 【参考方案1】:按照微软 CEO 的命令,我们需要遵循他在注册依赖属性时定义的命名约定。所以问题是你忘了敲几个键,正确的形式是:
public static readonly DependencyProperty LookupListProperty =
DependencyProperty.Register("LookupList", typeof(IEnumerable<T_AssetDescription>),
typeof(AssetDescriptionLookupConverter));
【讨论】:
老实说,我认为-Property
约定已经涵盖了这一点。
是的。我认为它只是被新鲜的眼睛发现,有时我们看不到明显的东西;)有时
通过使用 nameof 来避免这个问题:DependencyProperty.Register(nameof(LookupList), ...)
以上是关于尝试绑定此 ValueConverter 时出现“只能在 DependencyObject 的 DependencyProperty 上设置绑定”错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用键绑定时出现 Tkinter/Canvas 类型错误
如何将 ValueConverter 应用于基于约定的 Caliburn.Micro 绑定示例?