2016-01-20 73 views
0

在綁定使用FindAncestor有一個關於性能問題的問題。WPF FindAncestor性能問題

我想使用基地的DataContext的兒童用戶控制或ListBoxItem中/ ListViewItem的。

這個問題的替代方法是什麼?

FindAncestor

+0

我覺得FindAncestor是因爲ListBoxItems有自己的DataContext這裏的路要走。這是如何帶來性能問題的? –

回答

0

給母公司的名稱,並綁定到它與ElementName=

0

而不是遍歷視覺樹與FindAncestor,你可以遍歷當前控件的DataContext。爲了能夠做到這一點,您需要在您的ViewModels中向父母ViewModel提供參考。我通常有一個基礎ViewModel類有一個屬性ParentRoot:通過這個

​​

public abstract class ViewModel : INotifyPropertyChanged 
{ 
    private ViewModel parentViewModel; 

    public ViewModel(ViewModel parent) 
    { 
     parentViewModel = parent; 
    } 

    /// <summary> 
    /// Get the top ViewModel for binding (eg Root.IsEnabled) 
    /// </summary> 
    public ViewModel Root 
    { 
     get 
     { 
      if (parentViewModel != null) 
      { 
       return parentViewModel.Root; 
      } 
      else 
      { 
       return this; 
      } 
     } 
    } 
} 

在XAML,然後你可以取代這個

<ComboBox x:Name="Sector" 
       ItemsSource="{Binding Root.SectorList}" 
       SelectedValuePath="Id" 
       SelectedValue="{Binding SectorId, Mode=TwoWay}" /> 

一要求:Root屬性始終必須存在於最上面的ViewModel