如何在实例化自定义类型时触发依赖属性PropertyChangedCallback
本文关键字:依赖 属性 PropertyChangedCallback 类型 实例化 自定义 | 更新日期: 2023-09-27 17:54:28
我在自定义控件中设置了一个依赖属性,如下所示:
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函数会按预期触发。但是,如果我需要清除集合,那么我只需将其实例化为new,但回调函数不会触发。我可以在使用控件的任何地方创建一个hack,但这显然不是理想的。如何使回调函数在自定义类型实例化时触发。如果有其他建议可以解决我的问题,我当然欢迎。
这个方法很脏,但是可以工作。将值更改为null并返回old将强制您更改属性回调。
collection.Clear();
foreach(var item in list)
{
// refresh data
var temp = item.Data;
item.Data = null;
item.Data = temp;
collection.Add(item);
}
叹气…我是个十足的白痴。Michael Gunter评论并指出了我发布错误回调方法的错误。我的问题是粗心大意和糟糕的命名。我不仅在代码中发布了错误的方法,而且在更改Data属性时还检查了错误的触发方法。它一直工作正常,我最初的问题在别处。很抱歉我犯了这么愚蠢的错误,打扰了大家。不过,我确实很感激网景公司提供的每个人的意见和额外的教育。谢谢大家。