2014-03-27 108 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); 
}