1

我的代码中有几个绑定,但我不确定为什么只有这个在 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 中编写绑定时,绑定发生在不同的时间,而不是像后面的代码那样发生在加载事件上。如果在实际创建信号图之前为时过早,那么它可能没有正确绑定?但我没有收到绑定错误消息。很困惑。

4

1 回答 1

0

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

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

于 2013-06-20T20:40:44.383 回答