我在自定义控件中设置了依赖项属性,如下所示:
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函数将按预期触发。但是,如果我需要清除集合,那么我只是将其实例化为新的但回调函数不会触发。我可以在任何地方创建一个使用控件的黑客,但这显然不理想。如何在实例化自定义类型时获取要触发的回调函数。其他解决我问题的建议当然是受欢迎的。
答案 0 :(得分:0)
这种方法非常脏但可行。将值更改为null并返回旧值将强制您进行propertychanged回调。
collection.Clear();
foreach(var item in list)
{
// refresh data
var temp = item.Data;
item.Data = null;
item.Data = temp;
collection.Add(item);
}
答案 1 :(得分:0)