绑定只能在依赖对象的依赖属性上设置——当属性被 new 覆盖时

本文关键字:依赖 属性 new 覆盖 设置 对象 绑定 | 更新日期: 2023-09-27 18:30:16

我有一个类层次结构,如下所示,并且绑定到 VisibleRange 属性正在设计器中抛出。

给定这里的类层次结构:

// Base class
public abstract class AxisBase : ContentControl, IAxis
{
    public static readonly DependencyProperty VisibleRangeProperty = DependencyProperty.Register(
        "VisibleRange", typeof(IRange), typeof(AxisBase), 
         new PropertyMetadata(default(IRange), OnVisibleRangeChanged));
    public IRange VisibleRange
    {
        get { return (IRange)GetValue(VisibleRangeProperty); }
        set { SetValue(VisibleRangeProperty, value); }
    }
}
// Derived class
public class DateTimeAxis : AxisBase
{
        public new IRange<DateTime> VisibleRange
        {
            get { return (IRange<DateTime>)GetValue(VisibleRangeProperty); }
            set { SetValue(VisibleRangeProperty, value); }
        }
}
// And interface definitions
public interface IRange<T> : IRange 
{
}

和设计器 (XAML) 在这里:

<local:DateTimeAxis Style="{StaticResource XAxisStyle}"                                               
       VisibleRange="{Binding ElementName=priceChart, 
                      Path=XAxis.VisibleRange, Mode=TwoWay}"/>

我得到这个异常:

不能在类型为"日期时间轴"的"可见范围"属性上设置"绑定"。"绑定"只能在依赖对象的依赖属性上设置。

派生类DateTimeAxis公开 VisibleRange 属性,该属性被 new 关键字重写。我无法将泛型类型参数添加到基AxisBase类,并且还需要访问两个类中的属性。所以,我想知道鉴于这些限制,是否有人对如何更好地做到这一点以避免设计器异常有任何建议?

绑定只能在依赖对象的依赖属性上设置——当属性被 new 覆盖时

"依赖属性"是你注册的东西:

 public static readonly DependencyProperty VisibleRangeProperty = 
    DependencyProperty.Register("VisibleRange", typeof(IRange), typeof(AxisBase), ...);

当您查看该声明时,您可以看到它正在注册typeof(IRange)

派生类 DateTimeAxis 公开了 VisibleRange 属性,该属性被 new 关键字重写。

是的,但它公开的是"正常"属性,而不是依赖项属性。
另一个因素是属性具有不同的类型。

尝试在代码中编写XAxis初始化,例如

AxisBase XAxis = new DateTimeAxis ()

应该工作。