2011-06-29 65 views
0

我得到了以下XAML:WPF等待綁定做

<ng:Chart Palette="TheTreesPalette"> 
    <ng:Chart.Diagrams> 
     <Diagram Key="PersonnelHoursAWeek" For="{Binding}" Value="BarSeries3D" /> 
     <Diagram Key="PersonId" For="{Binding}" Value="BarSeries3D" /> 
    </ng:Chart.Diagrams> 
</ng:Chart> 

在代碼:

  • 圖是一個普通的ContentControl中。
  • 圖的是一個集合(和DependencyObject的),並從的DependencyProperty圖
  • 圖是內圖表爲DependencyObject

我的圖表需要時,圖將被添加到圖列表進行更新。通過使用DependencyProperty.Register,我已經註冊了「Diagrams」列表,但它不會等待綁定(所以當「事件」通過時,圖的For屬性爲空)。

chart.cs:

public static readonly DependencyProperty DiagramsProperty = DependencyProperty.Register("Diagrams", typeof(SkillsNG.Application.Behaviors.DiagramCollection), typeof(Chart), new UIPropertyMetadata(null, FunctionToCall)); 
private static void FunctionToCall(DependencyObject @this, DependencyPropertyChangedEventArgs e) 
{ 
} 

我能做些什麼來得到一個充滿對於財產?

順便說一下,事件「加載」仍然沒有綁定。

解釋更多一點: 圖表可以有多個條/線,For屬性會給數據集一個條/線(在我的示例中稱爲圖)。關鍵是它的DataMember。

該綁定是綁定到給視圖的模型。但是綁定可以是「Binding Set1」和「Binding Set2」(我想要顯示的行的數據集)。

綁定是100%正確的,我的圖表會顯示我什麼時候只等一秒鐘來綁定它。所以我希望那個圖表通知Chart它已經被更改,或者Chart可以添加一個事件(Diagram.ForProperty.AddOwner像施工)。

回答

0

不確定Chart DataContext設置爲什麼(這就是子元素上的{Binding}會給你的),但Diagrams集合和它的成員不是元素,因此不會成爲Wpf邏輯的一部分樹,所以不會繼承父圖表DataContext。我希望在調試中運行此命令時可以看到輸出窗口中的Binding錯誤。

我認爲你已經基本上得到了與這個問題相同的問題:How to bind the same collection of values into all ComboBoxes in a DataGridComboBox?它提供了一個解決方案,彌補Wpf邏輯樹中的這種差距。

+0

綁定是正確的,我添加了一些額外的文本到我的第一個問題。 – XiniX00

+0

考慮到圖表和圖表綁定到相同的DataContext,您可以在Chart DataContextChanged事件中執行Dispatcher.BeginInvoke() - 在觸發子控件的時候將有它們的DataContext。但在我看來,你實際上希望圖表項目在For屬性更改時顯式調用Chart,如果情況如此,也許你應該在代碼中這樣做;即在圖DataContextChanged事件中查找父Chart,並調用一個方法來通知它刷新 - 或者如果要以Wpf方式播放它,則執行一個自定義Command。 – fubaar