我想綁定數據(每秒1000條記錄,我的意思是每25毫秒25條記錄)到一個列表視圖,它必須按日期時間降序排列。Wpf實時數據綁定到列表視圖
我已經使用了observable集合。當我從源(例如套接字)獲取數據時,我通過將模型插入可觀察集合的零索引來添加到我的集合中。
observableCollection.Insert(0, model);
它工作沒問題,但它使用%30 cpu(英特爾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>
是否正確使用列表視圖?
我該如何提高性能?
有沒有其他技術可以做到這一點?
暫時忽略刷新問題,你真的希望用戶滾動瀏覽那麼多的數據尋找什麼?我會爭辯說,即使是頂部的可見行也會變得太快,以至於無法「閱讀」其中的內容。可能一個替代用戶界面是一個更好的方法?例如,將數據寫入某種日誌文件併爲用戶提供搜索對話框。 – 2015-02-11 15:45:16
不,用戶應該使用滾動 – 2015-02-11 16:42:57
這很不幸。你可能已經意識到'ObservableCollection'和'ItemsControl'綁定方法將無法應對以這種速度刷新數據量。您也可以將項目插入列表頂部,而不是底部,AFAIK將使項目控件刷新所有*容器。如果這些是你的UI約束,那麼我會建議完全放棄項目控件和綁定,編寫自己的自定義控件並通過代碼隱藏創建視覺效果。 – 2015-02-11 16:51:16