簡體   English   中英

實例化自定義類型時如何觸發Dependency屬性PropertyChangedCallback

[英]How to fire Dependency property PropertyChangedCallback when instantiating custom type

我在自定義控件中有一個依賴項屬性設置,如下所示:

    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函數會按預期觸發。 但是,如果需要清除該集合,則只需將其實例化為新集合,但不會觸發回調函數。 我可以在使用該控件的任何地方創建一個hack,但這顯然不理想。 實例化自定義類型后,如何使回調函數觸發。 當然也歡迎提出解決我的問題的其他建議。

這種方法很臟,但是可以用。 將值更改為null並返回舊值將強制您更改屬性。

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

igh ...我是個白痴。 邁克爾·岡特(Michael Gunter)評論並指出了我發布錯誤的回調方法的錯誤。 我的問題是粗心和命名不當的結合。 我不僅在代碼中發布了錯誤的方法,而且還在更改Data屬性時檢查了錯誤的觸發方法。 一直正常工作,而我最初的問題在其他地方。 很抱歉打擾我這個愚蠢的錯誤。 但是,我非常感謝每個人的投入以及NETscape提供的額外教育。 謝謝大家。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM