[英]how to bind async method in PropertyChangedCallback of dependency property?
[英]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.