3

したがって、親コントロールの依存関係プロパティの値を取得する必要があるサブコントロールがいくつかあります。親の依存関係プロパティに値をバインドすると、親の依存関係プロパティが変更されたときに発生するコールバック メソッドを作成するよりも高速になりますか?

私はそれを次のようにコーディングしようとしていました:

    ItemsControl ic = this.signal_viewer_item_control;
    int count = VisualTreeHelper.GetChildrenCount(ic);
    foreach (var item in ic.Items)
    {
      ContentPresenter container = ic.ItemContainerGenerator.ContainerFromItem(item) as ContentPresenter;
      if (container != null)
      {
        SignalGraph sg = container.ContentTemplate.FindName("signal_graph", container) as SignalGraph;
        if (sg != null)
        {
          sg.GraphPenWidth = GraphPenWidth;
          sg.DrawSignals();
        }
      }
    }

サブコントロールのグラフペン幅を手動で変更するだけです。それを依存関係プロパティにして、親のgraphpenwidth値にバインドする方が良いですか? 2 つの依存関係プロパティを作成することは不要なオーバーヘッドになると思っただけですが、この状況でそれを使用する利点があるかどうか疑問に思っています

編集:戻って、依存関係プロパティを使用して2つを比較しようとしましたが、それを機能させることができないようです。

<wpfExp:SignalGraph 
    x:Name="signal_graph"
    Height="75"
    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}">
  <wpfExp:SignalGraph.GraphPenWidth>
    <Binding ElementName="signal_box" Path="GraphPenWidth" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnTargetUpdated="True">
    </Binding>
  </wpfExp:SignalGraph.GraphPenWidth>
</wpfExp:SignalGraph>

2 つのプロパティ間のグラフ ペン幅に双方向バインディングを配置し、次のように新しいプロパティを登録しました。

private static readonly DependencyProperty GraphPenWidthProperty =
  DependencyProperty.Register("GraphPenWidth",
  typeof(int), typeof(SignalGraph),
  new FrameworkPropertyMetadata(new int(), new    PropertyChangedCallback(GraphPenWidthChanged)));
public int GraphPenWidth
{
  get
  {
    return (int)GetValue(GraphPenWidthProperty);
  }
  set
  {
    SetValue(GraphPenWidthProperty, value);
    default_pen = new Pen(Brushes.Green, value);
  }
}
private static void GraphPenWidthChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
  SignalGraph sg = d as SignalGraph;
  sg.DrawSignals();
}

ただし、変更時には、graphpenwidthchanged コールバック メソッドが呼び出されることはありません。アイテムテンプレートにあることと何か関係があるのだろうか?更新されない原因は何ですか?

4

1 に答える 1