2017-02-28 71 views
0

我有多個UserControl s裏面的窗口。所有的控件在開始時都不可見,但用戶可以從ListBox中選擇哪個控件應該可見。每個UserControl包含DataGrid與一些數據。每當UserControlvisibility更改爲Visible時,DataGrid似乎都會重建其內容/行。我想要防止這種情況,因爲它會嚴重影響性能。如何防止DataGrid在其可見性更改後重建行?

如何防止DataGrid s每次更改可見性時重建行?

下面是例子:

<Window x:Class="Core.View.Windows.MainWindow" ...> 
    <Window.DataContext> 
     ... 
    </Window.DataContext> 
    <Window.Resources> 
     ... 
    </Window.Resources> 
    <Grid> 

     <ListBox ...> 
      ... 
     </ListBox> 

     <UserControl1 Visibility="{SomeBindingWithConverter}" /> 
     <UserControl2 Visibility="{SomeBindingWithConverter}" /> 
     <UserControl3 Visibility="{SomeBindingWithConverter}" /> 
     <UserControl4 Visibility="{SomeBindingWithConverter}" /> 
     <UserControl5 Visibility="{SomeBindingWithConverter}" /> 
    </Grid> 
</Window> 
+0

是什麼讓你覺得行重建尋找速度?請提供一個證明此行爲的回購:http://stackoverflow.com/help/mcve。 – mm8

+0

@ mm8我可能使用了錯誤的單詞,但是當我更改爲'UserControl'並且出現在'ItemsSource'的IsAsync'後不久,我可以看到行不在網格內(不是visibile?)。 – user2475983

回答

0

使用虛擬化技術,如果您正在使用DataGrid

<DataGrid EnableRowVirtualization="True" 
      EnableColumnVirtualization="True" 
      VirtualizingStackPanel.VirtualizationMode="Standard" 
      VirtualizingStackPanel.IsVirtualizing="True"> 
</DataGrid> 
+0

情況並非如此。我想加載一次行,而不是每次'DataGrid'的可見性改變時加載它們。 – user2475983