2012-04-05 376 views
6

我有一個類層次結構如下,並綁定到VisibleRange屬性拋出設計器。綁定只能在DependencyObject的DependencyProperty上設置 - 當屬性被新的覆蓋時

鑑於類層次結構在這裏:

// 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}"/> 

我得到這個異常:

A '綁定' 不能設置類型'DateTimeAxis'的'VisibleRange'屬性。 '綁定'只能在DependencyObject的DependencyProperty上設置。

派生類DateTimeAxis暴露了VisibleRange屬性,該屬性被new關鍵字覆蓋。我無法向基類AxisBase類添加泛型類型參數,並且我還需要訪問這兩個類中的屬性。所以,我想知道這些限制,如果任何人有任何建議,如何更好地做到這一點,以避免設計師的例外?

+0

Andrew Burnett-Thom:你有沒有嘗試在我的答案中編碼?它有用嗎? – Tigran 2012-04-05 21:58:54

回答

10

的「依賴項屬性」是你註冊的事情:

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

而且當你看這句話,你可以看到它與typeof(IRange)

派生類的DateTimeAxis是註冊暴露由new關鍵字覆蓋的VisibleRange屬性。

是的,但是它暴露了一個'正常'屬性,而不是一個依賴屬性。
另一個因素是屬性具有不同的類型。

+0

它暴露了基地的DependencyProperty - 我想這是它出錯的地方吧?我可能可以使用新的覆蓋,並在整個代碼中放置代碼 – 2012-04-05 21:41:33

+2

是的,DP是怪獸。我會繞過這個。 – 2012-04-05 21:45:00

+0

完成,並工作:)感謝您的提示! – 2012-04-05 21:47:56

0

嘗試XAxis的代碼初始化寫,像

AxisBase XAxis = new DateTimeAxis()

應該工作。

+0

我很好奇,如果它... – 2012-04-05 21:47:03

+0

@HenkHolterman:其實我也是,將寫入OP .. :) – Tigran 2012-04-05 21:58:06

+0

不知道你是什麼意思 - DateTimeAxis是在Xaml中構建的,而不是C#代碼 – 2012-04-05 22:01:21

相關問題