簡體   English   中英

WPF實時數據綁定到列表視圖

[英]Wpf Realtime DataBinding To Listview

我想將數據(每秒1000條記錄,我的意思是每25毫秒25條記錄)綁定到列表視圖,並且必須按日期時間降序排列。

我使用了可觀察的集合。 當我從源(例如套接字)獲取數據時,我通過在可觀察集合的零索引處插入模型來添加到集合中。

 observableCollection.Insert(0, model);

它沒有問題,但是正在使用%30 cpu(intel i5)。 如果我打開這些窗口10次,我的應用程序就會變慢。 我正在使用虛擬化屬性。 如果我未設置listview的itemsource,則CPU使用率約為%0。

這是我的列表視圖:

 <ListView HorizontalAlignment="Stretch" VirtualizingStackPanel.IsVirtualizing="True"  VirtualizingStackPanel.VirtualizationMode="Recycling"   Name="listView" ScrollViewer.CanContentScroll="True" Grid.Column="0"   VerticalAlignment="Stretch"  ItemsSource="{Binding observableCollection}">
  <ListView.ItemsPanel>
    <ItemsPanelTemplate>
      <VirtualizingStackPanel></VirtualizingStackPanel>
    </ItemsPanelTemplate>
  </ListView.ItemsPanel>
  <ListView.View>

    <GridView>
      <GridViewColumn DisplayMemberBinding="{Binding ID}" Width="75"  Header="Id" />
      <GridViewColumn DisplayMemberBinding="{Binding Time}" Width="175"  Header="Time"  />
      <!-- Ten more columns -->
    </GridView>
  </ListView.View>
</ListView>

使用listview是否正確?

如何提高性能?

還有其他技術可以做到這一點嗎?

ObservableCollection的INotifyCollectionChanged事件是瓶頸。 嘗試首先構建結果列表,然后從列表中創建一個ObservableCollection,然后將ObservableCollection分配給控件的ItemsSource。

通過僅將前100個項添加到列表框,然后將單獨的滾動條的最大值和值設置為實際數據大小和位置,來考慮假冒的滾動條。 這需要更多代碼才能使滾動條和列表框保持同步。

數據量和更新數量實在太多,偽造冗長的列表可能是唯一的解決方案。

暫無
暫無

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

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