簡體   English   中英

數據綁定比手動修改子控件的屬性更快嗎?

[英]Is data binding faster than modifying the properties of subcontrols manually?

所以我有幾個子控件需要取父控件依賴屬性的值。 將值綁定到父級的依賴項屬性會比創建父級依賴項屬性更改時發生的回調方法更快嗎?

我准備編寫它,以便:

    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。 是否更好地使它成為依賴屬性並將其綁定到父的graphpenwidth值? 我只是認為創建兩個依賴屬性是不必要的開銷,但我想知道在這種情況下是否有好處

編輯:所以我回去並嘗試使用依賴屬性來比較兩者,但后來我似乎無法讓它工作。

<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>

我在兩個屬性之間的圖形penwidth上進行了雙向綁定,然后注冊了新屬性,如下所示:

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回調方法。 我想知道它與itemtemplate有什么關系嗎? 什么可能導致它不更新?

如果您沒有大量綁定到不同的依賴項屬性,綁定和手動setter之間的性能差異是不明顯的。 無論如何,如果您打算使用手動設置器,每次更改屬性時在模板中搜索元素 - 不是一個好主意。 如何在GetContainerForItemOverride中返回自定義控件並將其模板子項(在您的情況下為SignalGraph)存儲為屬性(您可以使用GetTemplateChild方法在OnApplyTemplate中獲取它)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM