绑定只能在DependencyObject的DependencyProperty上设置 - 当使用new覆盖属性时

时间:2012-04-05 21:31:15

标签: c# wpf xaml

我有一个类层次结构,如下所示,绑定到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'属性上设置'绑定'。 '绑定'只能在DependencyObject的DependencyProperty上设置。

派生类DateTimeAxis正在公开VisibleRange属性,该属性被new关键字覆盖。我无法在基类AxisBase类中添加泛型类型参数,我还需要在两个类中访问该属性。所以,我想知道给定这些限制,如果有人有任何建议如何更好地避免设计师例外?

2 个答案:

答案 0 :(得分:10)

'依赖属性'是您注册的内容:

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

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

  

派生类DateTimeAxis正在公开VisibleRange属性,该属性被new关键字覆盖。

是的,但它暴露了'正常'属性,而不是依赖属性 另一个因素是属性具有不同的类型。

答案 1 :(得分:0)

尝试写入XAxis的代码初始化,例如

AxisBase XAxis = new DateTimeAxis ()

应该工作。