2015-05-18 132 views
2

我有一个UserControl名为MultiChartControl,它有一个名为MultiChartInputDetails的依赖项属性。DependencyPropertyChanged回调事件没有被触发

public ChartsData MultiChartInputDetails 
    { 
     get { return (ChartsData)GetValue(MultiChartInputDetailsProperty); } 
     set { SetValue(MultiChartInputDetailsProperty, value); } 
    } 

    public static readonly DependencyProperty MultiChartInputDetailsProperty = 
     DependencyProperty.Register("MultiChartInputDetails", typeof(ChartsData), typeof(MultiChartControl), new UIPropertyMetadata(new PropertyChangedCallback(MultiChartInputDetailsChanged))); 

但接下来的回调方法不会被解雇甚至一度:

private static void MultiChartInputDetailsChanged(DependencyObject d, DependencyPropertyChangedEventArgs args) 
    { 
     MultiChartControl chart = d as MultiChartControl; 
     if (chart != null) 
     { 
      if (chart.ChartGrid.Children != null) 
       chart.ChartGrid.Children.Clear();     
      chart.InitilizeData(); 
     } 

     MessageBox.Show("MultiChartInputDetailsChanged fired"); 
    } 

和主主控:

<multicharting:MultiChartControl x:Uid="multicharting:MultiChartControl_1" 
              MultiChartInputDetails="{Binding Path=MultiChartsInputDetails, ElementName=Chart, Converter={StaticResource DebugConverter}}"/> 
+0

是否结合产生一个有效的价值? – Clemens

回答

1

这是因为DependencyProperty的未设置通过绑定双向。完成如下:

DependencyProperty.Register("MultiChartInputDetails", 
    typeof(ChartsData), 
    typeof(MultiChartControl), 
    new FrameworkPropertyMetadat(default(ChartsData), 
     FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
     MultiChartInputDetailsChanged) 

此外,检查是否有任何绑定错误。如果你不想提供执行双向每默认绑定,那么你可以写成如下您bindinga依赖属性:

<multicharting:MultiChartControl x:Uid="multicharting:MultiChartControl_1" 
    MultiChartInputDetails="{Binding Path=MultiChartsInputDetails, 
            Mode=TwoWay, 
            ElementName=Chart, 
            Converter={StaticResource DebugConverter}}"/> 
+0

触发依赖项属性的PropertyChangedCallback不需要双向绑定。 – Clemens

+0

@Clemens否,那不是,但是如果绑定变量已经改变并且没有TwoWayBinding,则DP的值将不会被设置。 –

+0

这是不正确的。你不知道绑定的源属性(不幸的是也被命名为MultiChartsInputDetails),因为OP没有告诉我们。但是,如果它更改并引发更改通知,则目标MultiChartsInputDetails属性当然会更改,即使是单向绑定。 – Clemens