尝试绑定此 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 绑定示例?

为 Xamarin 创建 Android 绑定时出现问题

为啥在 PL/SQL Oracle 中尝试创建 INSTEAD OF 触发器时出现“错误的绑定变量”错误?

运行代码时出现错误

Android ViewBinding 有时会在绑定对象处返回 null,因此在尝试访问视图时出现空指针异常