绑定只能在依赖对象的依赖属性上设置——当属性被 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
类,并且还需要访问两个类中的属性。所以,我想知道鉴于这些限制,是否有人对如何更好地做到这一点以避免设计器异常有任何建议?
"依赖属性"是你注册的东西:
public static readonly DependencyProperty VisibleRangeProperty =
DependencyProperty.Register("VisibleRange", typeof(IRange), typeof(AxisBase), ...);
当您查看该声明时,您可以看到它正在注册typeof(IRange)
派生类 DateTimeAxis 公开了 VisibleRange 属性,该属性被 new 关键字重写。
是的,但它公开的是"正常"属性,而不是依赖项属性。
另一个因素是属性具有不同的类型。
尝试在代码中编写XAxis
初始化,例如
AxisBase XAxis = new DateTimeAxis ()
应该工作。