2010-10-01 70 views
1

我有一個ListView選擇其項目的方式有問題的選擇。ListView的選擇問題 - 緩存防止許多項目

我有一個綁定到有一個「選擇」屬性的項目的一個ObservableCollection一個ListView。我已綁定的選擇狀態是這樣的:

<ListView.ItemContainerStyle> 
    <Style TargetType="{x:Type ListViewItem}"> 
     <Setter Property="IsSelected" Value="{Binding Path=Selected, Mode=TwoWay}" /> 
    </Style> 
</ListView.ItemContainerStyle> 

但在列表approxemitly 1000項,ListView控件僅持有容器上啓動可見物體或約500時已通過滾動。所以,即使我選擇所有(按Ctrl + A),選擇只能獲得爲這些500

我也嘗試了很多其他解決方案的是來到我的腦海裏,但沒有奏效。

  • ListView.SelectedItems不能被綁定到。
  • 使用SelectionChanged事件設置「選擇」屬性 - 滾動區域時觸發了大量的SelectionChanged事件,這是沒有選擇的時間緩衝,因此,項目爲「新選擇」的名單。
  • 使用的ListView的SelectionChanged事件添加和刪除更改的選擇,以一個額外的集合 - 無法從視圖模型選擇,因爲只有在一個方向的作品。

無論如何有可能有一個ListView,我可以選擇超過500個項目,並在ViewModel中的某個位置有此信息。也應該可以從ViewModel中選擇/取消選擇。

感謝

回答

0

我會建議你使用數據模板爲您listviewitems並在DataTemplate中,你應該有一個複選按鈕,或者複選框等(即保持狀態的控制)。然後我會將它綁定到你的視圖模型上。然後,我會讓它完全繞過你的列表視圖控件所選擇的機制。您可以根據可綁定到您的視圖模型的按鈕狀態將模板設置爲您的listview項目。

該解決方案,我建議是不是精彩,相比IsSelected工作,你希望它。如果你想要一個更整潔的版本,也許你可以實現我所建議的作爲一個新的封裝控件,它使IsSelected可觀察/可綁定,就像你期望的那樣。可能第三方控制可用可能支持這種行爲?