2012-01-31 60 views
0

監控的ListView選擇更改我有一個項目的ListView,我想每一個用戶選擇或不訴諸事件處理程序在控件的代碼隱藏取消選擇項目時運行一些代碼 - 一切都在視圖正在做該控件將其datacontext設置爲。使用綁定

當ListView控件的選擇模式是「單次」我可以簡單地「的SelectedItem」綁定到財產在我看來,並觀察當屬性的更改事件。但是,如果選擇模式是「多個」,則行爲完全不可靠。有時點擊的最後一個項目會改變SelectedItem,有時它不會。當選擇模式不單一時,此DependencyProperty似乎是完全垃圾。我還可以如何使用綁定來跟蹤對ListView的SelectedItems集合的更改?

注意,所以我不會使用Interaction.Triggers或類似的庫解決方案我不使用Expression Blend中。

<ListView ItemsSource="{Binding Path=Zones}" 
      SelectionMode="Multiple" 
      SelectedItem="{Binding SelectedZone}"> 
+0

真的不明白這句話:「沒有訴諸控件的代碼隱藏事件處理程序」。那麼如果你不想在代碼隱藏的東西上繼承,你想如何創建一個'DataBinding'? – Tigran 2012-01-31 20:06:53

+0

@Tigran在WPF中,xaml文件(UI)具有代碼隱藏功能,可以爲其控件(如ListView.SelectionChanged事件)包含程序邏輯和事件處理程序。有一種稱爲MVVM模式的方法,它涉及使用datacontext和綁定,以便控件可以直接綁定到對象模型,而不是使用以編程方式操作屬性的中間方法。因爲我的控件以這種方式綁定到它的底層數據,所以在視圖和代碼隱藏控件之間分割在底層數據上完成的工作是一個巨大的痛苦(並且不雅)。 – Alain 2012-01-31 20:19:15

+0

嘗試在ListView上關閉virtualiztion。您是否看到當您單擊與當前選定項目位於同一屏幕上的項目時,如果您不得不向下滾動至該項目,則會得到不同的結果。這聽起來很奇怪,但我想嘗試的是使ListView單一,但使項目本身可切換(只是一個布爾屬性手動選擇)和基於isManuallySelected的XAML中的自定義演示文稿,因此它看起來和感覺像一個多選。 – Paparazzi 2012-01-31 22:59:40

回答

0

唯一的解決方案是將ItemsTemplate封裝在可以切換的控件中,並且具有命令綁定(如按鈕),然後將視圖模型綁定到該命令綁定。這是一個巨大的痛苦,需要使用HitTestVisibility進行黑客攻擊,並將按鈕的狀態綁定到項目的選定狀態,但最終會起作用。

0

不要看那麼this好文章描述的任何其他方式。

的事情是,unfrotunately,SelectedItems屬性是隻讀的,所以不能databinded。

直到現在,這是一個棘手的故事,不幸的是。

+0

我很欣賞搜索工作,但我已閱讀該文章以及其他一些文章,這部分是爲什麼我特別提到我不想使用任何庫解決方案。此解決方案涉及添加一個附加屬性庫(我不想將其包含在項目代碼庫中),此外,它僅專門用於同步兩個不同ListView的SelectedItems集合 - 使其具有高度專業化的代碼,只是有點類似滿足我目前的需求。 – Alain 2012-01-31 20:25:41

+0

另請注意,SelectedItems屬性爲只讀的事實對我來說不是問題。我不需要通過綁定來操作選定的項目 - 真正的問題是SelectedItems屬性不會公開集合中項目的屬性changed事件,所以這個綁定永遠不會改變 - SelectedItems集合在整個一個ListView。 – Alain 2012-01-31 20:27:38

+0

@Alain:我重新檢查了我提供的鏈接,在我看來(和以前一樣),頁面底部有一個鏈接,其中包含** source **。所以你不需要一些外部庫來運行它。只需重用解決方案中提供的類。我沒有使用這個解決方案,但是很久以前就對它進行了檢查。 – Tigran 2012-01-31 20:33:15