数据绑定在代码隐藏中工作,但在XAML可能的ItemsControl问题中不起作用

时间:2013-06-20 01:56:54

标签: wpf xaml data-binding

我的代码中有几个绑定,但我不确定为什么只有这个绑定在xaml中失败。

       <ItemsControl.ItemTemplate>
          <DataTemplate>
              <wpfExp:SignalGraph
                  x:Name="signal_graph"
                  Height="{Binding ElementName=signal_box, Path=GraphHeight, Mode=OneWay}"
                  <!--PenWidth="{Binding ElementName=signal_box, Path=GraphPenWidth, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"-->
                  Signal="{Binding}" 
                  signal_graph_window_width="{Binding ElementName=signal_box, Path=signal_graph_window_width, Mode=OneWay}"
                  X_Scale="{Binding ElementName=signal_box, Path=X_Scale, Mode=OneWay}"
                  MaxTimeValue="{Binding Source = {StaticResource ResourceKey=signal_data}, Path = MaxTimeValue, Mode=OneWay}"
              />

只有评论行失败。同时,如果我进入代码背后:

private void SignalGraph_Loaded(object sender, RoutedEventArgs e)
{
      loaded = true;

      Binding b1 = new Binding();
      b1.ElementName = "signal_box";
      b1.Path = new PropertyPath("GraphPenWidth");
      b1.Mode = BindingMode.OneWay;
      b1.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
      this.SetBinding(PenWidthProperty, b1);

      Width = signal_graph_window_width;
      SignalBox sb = VisualTreeUtilities.FindVisualParent<SignalBox>(this);
      DrawSignals();

}

这是有效的。对我来说,他们看起来都是一样的。

但我能想到的唯一可能的解释是,当我在xaml中编写绑定时,Binding会在不同的时间发生,而不是像后面的代码那样在load事件上发生。如果它太早,在实际创建信号图之前,那么可能它没有正确绑定?但我没有收到绑定错误消息。相当困惑。

1 个答案:

答案 0 :(得分:0)

所以我弄清楚发生了什么。基本上我不小心使用.net属性setter为DependencyProperty设置了一个值,它覆盖了绑定。当我在代码后面执行绑定时,我将绑定放在加载的事件块中,但是在xaml中,绑定发生在更高级别控件的构造函数中,因此稍后会被覆盖。

感谢所有的想法,并帮助思考它