2017-01-25 15 views
1

TabControlには3つのTabItemsがあります。各TabItemには独自のViewModelがあります。最後のタブにはListViewと+1500個のレコードが含まれています。したがって、このタブを開くたびに、レンダリングには+ 10秒かかります。私はListViewを最適化したいので、毎回レンダリングするのに時間がかかりません。TabControlのパフォーマンスが悪いWPF

私はObservableCollectionListViewにバインドしています。これは、それをスピードアップ

<VirtualizingPanel.VirtualizationMode="Recycling"> 

が、reeeeeeeally遅いスクロール可能:

ListViewは、私はすでに試したこの

<ListView> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn> 
       <GridViewColumnHeader> 
        <TextBox... custom templates for filtering here 
       </GridViewColumnHeader> 
      </GridViewColumn> 
      </GridView> 
    <ListView.View> 
</ListView> 

のように見えます。

答えて

1

私はあなたがいくつかの小さなページ(20/50項目)にあなたの大切なコレクションを分離し、少しして、新しいアイテムを追加することができると思います。ページをリフレッシュするためにビヘイビアを使用することをお勧めします。 awaitableコマンドをバインドするだけで、新しいアイテムをコレクションに追加できます。 新しいアイテムがスクロールダウン中に追加されます。

internal class ScrollEndToCommandBehavior : Behavior<ScrollViewer> 
{ 
    #region Public Static Fields and Constants 

    public static readonly DependencyProperty CommandParameterProperty = 
     DependencyProperty.Register("CommandParameter", typeof (object), typeof (ScrollEndToCommandBehavior), new PropertyMetadata(null)); 

    public static readonly DependencyProperty CommandProperty = 
     DependencyProperty.Register("Command", typeof (ICommand), typeof (ScrollEndToCommandBehavior), new PropertyMetadata(null)); 

    #endregion 

    #region Public Properties 

    public ICommand Command 
    { 
     get { return (ICommand) GetValue(CommandProperty); } 
     set { SetValue(CommandProperty, value); } 
    } 


    public object CommandParameter 
    { 
     get { return GetValue(CommandParameterProperty); } 
     set { SetValue(CommandParameterProperty, value); } 
    } 

    #endregion 

    #region Protected Methods 

    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     AssociatedObject.ViewChanged += AssociatedObjectOnViewChanged; 
    } 

    protected override void OnDetaching() 
    { 
     AssociatedObject.ViewChanged -= AssociatedObjectOnViewChanged; 
     base.OnDetaching(); 
    } 

    #endregion 

    #region Private Methods 

    private void AssociatedObjectOnViewChanged(object sender, ScrollViewerViewChangedEventArgs eventArgs) 
    { 
     if (!eventArgs.IsIntermediate && Math.Abs(AssociatedObject.ScrollableHeight - AssociatedObject.VerticalOffset) < 5) 
     { 
      Command?.Execute(CommandParameter); 
     } 
    } 

    #endregion 
} 
+0

感謝!!いくつかの変更の後、それは魅力のように働いた。 'ViewChanged'はUWPのためのものであることに言及する価値があります。 WPFでこれを使用したい場合は、 'ScrollChanged'を使用してください。それは 'ListView'自体、私は' ListView'から 'ScrollViewer'を抽出' OnAttaching'内に取り付けてもできるように、私も行動を変更しました。おかげで再び:) –

+0

、勝つ8.xの+ WinPhone ... –

関連する問題