2014-03-27 130 views
0

時,如何解僱依賴屬性PropertyChangedCallback我有一個自定義控制中的依賴屬性設置如下:實例化自定義類型

public IChartData Data 
    { 
     get 
     { 
      return (IChartData)GetValue(DataProperty); 
     } 
     set 
     { 
      SetValue(DataProperty, value); 
     } 
    } 

    public static readonly DependencyProperty DataProperty = DependencyProperty.Register 
                  (
                   "Data", 
                   typeof(IChartData), 
                   typeof(ChartViewUserControl), 
                   new FrameworkPropertyMetadata() { PropertyChangedCallback = UpdateCharting } 
                  ); 

及其PropertyChangedCallback這樣:

private static void UpdateCharting(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     // Stuff Happens Here 
    } 

正如你所看到的,依賴項屬性類型是IChartData。其原因是,我可以通過兩種類型(SimpleChartData或ComplexChartData。)這兩種類型都的一個擴展集這樣:

public class SimpleChartData : ObservableCollection<ChartDataItem>, IChartData 

public class ComplexChartData : ObservableCollection<SimpleChartData>, IChartData 

我的問題是,如果我創建一個這樣的類型的實例並添加到集合中,然後PropertyChangedCallback函數按預期觸發。但是,如果我需要清除集合,那麼我將它初始化爲新的,但回調函數不會觸發。我可以在所有使用控件的地方創建一個黑客,但這顯然不理想。如何讓自定義類型實例化時的回調函數觸發。其他建議來解決我的問題當然是受歡迎的。

+1

不要將它初始化爲新的,這不是很聰明。做'collection.Clear()' – Kcvin

+1

你的PropertyChangedCallback實際上就是你的方法'UpdateCharting'。請將其添加到您的帖子中,以便我們可以看到發生了什麼問題。 –

+0

是的,只要我發佈它,就看到了我的錯誤。它是固定的。對於那個很抱歉。 – flyNflip

回答

0

嘆息......我是一個完全白癡。 Michael Gunter評論並指出了我發佈錯誤回調方法的錯誤。我的問題是粗心大意和糟糕命名的結合。不僅我在代碼中發佈了錯誤的方法,而且在更改Data屬性時,我也一直在檢查錯誤的方法。它一直在正常工作,而我最初的問題在其他地方。我很抱歉打擾每個人都有我這樣一個愚蠢的錯誤。然而,我很欣賞每個人的意見和NETscape提供的額外教育。謝謝大家。

0

這種方法很骯髒,但會起作用。將值更改爲null並返回到舊值將強制您更改屬性的回調。

collection.Clear(); 
foreach(var item in list) 
{ 
    // refresh data 
    var temp = item.Data; 
    item.Data = null; 
    item.Data = temp; 
    collection.Add(item); 
}