Tengo una jerarquía de clases de la siguiente manera y el enlace a la propiedad VisibleRange está arrojando al diseñador.El enlace solo se puede establecer en DependencyProperty de DependencyObject - cuando la propiedad se reemplaza por
Dada la jerarquía de clases aquí:
// 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
{
}
y de diseño (XAML) aquí:
<local:DateTimeAxis Style="{StaticResource XAxisStyle}"
VisibleRange="{Binding ElementName=priceChart,
Path=XAxis.VisibleRange, Mode=TwoWay}"/>
me sale esta excepción:
A 'Encuadernación' no se puede establecer en la propiedad 'VisibleRange' de tipo 'DateTimeAxis'. Un 'Enlace' solo se puede establecer en una DependencyProperty de un DependencyObject.
La clase derivada DateTimeAxis
está exponiendo la propiedad VisibleRange que es anulado por la palabra clave new
. No puedo agregar un typeparam genérico a la clase base AxisBase
, y también necesito acceder a la propiedad en ambas clases. Entonces, me pregunto teniendo en cuenta estas limitaciones, si alguien tiene alguna sugerencia sobre cómo hacerlo mejor para evitar las excepciones del diseñador.
Andrew Burnett-Thom: trataste de codificar como en mi respuesta. Funcionó ? – Tigran