2010-03-24 72 views
13

一個ListBox我有一個WPF ListBox,我想與數據綁定的SelectionMode =多

  • 啓用多重選擇在ListBox,並
  • 數據綁定列表框到我的視圖模型。

這兩個要求似乎是不兼容的。我的視圖模型有一個ObservableCollection<T>屬性來綁定到這個ListBox;我在屬性中設置了XAML中的綁定到ListBox.SelectedItems屬性。當我編譯時,我得到一個錯誤,說SelectedItems屬性是隻讀的,無法從XAML中設置。

我是否綁定了錯誤的控件屬性?有沒有辦法將XAML中的多選列表框綁定到視圖模型集合屬性?謝謝你的幫助。

回答

6

我最終在SelectionChanged事件處理程序中使用了一些代碼隱藏來設置視圖模型屬性。比創建對象包裝更簡單。

21

你能做些什麼來解決這個問題:

創建您在列表中顯示項目的IsSelected屬性。我假設這些也由視圖模型來表示。所以添加額外的屬性不應該是一場戲劇。如果他們只是業務對象考慮使用一個包裝類無痛他們包裹在視圖模型項目(無恥的插件 - here是一個這樣的系統我用它每天來換我的業務對象。)

使用物品的容器風格綁定列表框中項目正在顯示的項目IsSelected屬性的IsSelected屬性,像這樣

<ListBox.ItemContainerStyle> 
     <!-- This Style binds a ListBoxItem to a the ViewModelItem. --> 
     <Style 
      TargetType="{x:Type ListBoxItem}"> 
      <Setter 
      Property="IsSelected" 
      Value="{Binding IsSelected, Mode=TwoWay}" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 

(可能需要一個基於樣式屬性,不知道)

現在只要列表盒子項目被選中你的視圖模型將知道它並可以更新其內部c根據需要選擇。

+0

我希望你包含viewmodel代碼...不知道應該在屬性上使用哪些數據類型。 – barrypicker 2015-12-24 22:01:52

+0

IsSelected屬性是一個布爾值。 – 2015-12-25 01:39:22

+0

這是一個非常好的解決方案。以防萬一,爲DataGrid中,XAML是: <形式的TargetType = 「{x:類型DataGridRow}」> ... Guillaume 2016-03-22 16:41:53

0

我已經發布了一種技術,只需通過擴展DataGrid,我相信可以輕鬆地選擇一個ListBox來允許WPF DataGrid的SelectedItems屬性的只讀綁定。你可以看到我的帖子在https://stackoverflow.com/a/16953833/62278