Tôi có một hệ thống phân cấp lớp như sau và ràng buộc với thuộc tính VisibleRange đang ném vào trình thiết kế.Chỉ có thể đặt ràng buộc trên DependencyProperty của DependencyObject - khi thuộc tính được ghi đè bằng
Với lớp thứ bậc ở đây:
// 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
{
}
Và nhà thiết kế (XAML) ở đây:
<local:DateTimeAxis Style="{StaticResource XAxisStyle}"
VisibleRange="{Binding ElementName=priceChart,
Path=XAxis.VisibleRange, Mode=TwoWay}"/>
tôi nhận được ngoại lệ này:
A 'Binding' không thể được đặt trên thuộc tính 'VisibleRange' thuộc loại 'DateTimeAxis'. Chỉ có thể đặt 'Binding' trên DependencyProperty của DependencyObject.
Lớp dẫn xuất DateTimeAxis
đang hiển thị thuộc tính VisibleRange bị ghi đè bởi từ khóa new
. Tôi không thể thêm typeparam chung vào lớp cơ sở AxisBase
và tôi cũng cần truy cập thuộc tính trong cả hai lớp. Vì vậy, tôi tự hỏi đưa ra những hạn chế, nếu có ai có bất cứ đề nghị về cách làm điều này tốt hơn để tránh các trường hợp ngoại lệ thiết kế?
Andrew Burnett-Thom: bạn đã thử viết mã như câu trả lời của tôi chưa. Nó có hoạt động không? – Tigran