[英]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.