2013-03-07 23 views
2

我想當用戶選擇一個或多個項目,我的源屬性得到更新。我嘗試過綁定模式OneWayToSource,但這不起作用。下面是XAML和視圖模型代碼:如何分配列表框選定的項目來源Propertey

<ListBox x:Name="ItemsListBox" SelectionMode="Multiple" Height="300" 
      ItemsSource="{Binding ResultSet}" 
      SelectedItem="{Binding SelectedItems,Mode=OneWayToSource}"> 

private List<string> _selectedItems; 
public List<string> SelectedItems 
{ 
    get 
    { 
     return _selectedItems; 
    } 
    set 
    { 
     _selectedModeItems = value; 
     NotifyPropertyChanged("SelectedItems"); 
    } 
} 

我以附加的行爲所採取的方法和它的作品,但沒有任何簡單的方法?

+0

NotifyPropertyChanged( 「SelectedeItems」);應該可能是NotifyPropertyChanged(「SelectedItems」); – Abbas 2013-03-07 10:31:20

+0

這就是編輯問題時出現拼寫錯誤,更新問題。謝謝 – Simsons 2013-03-07 10:37:24

回答

0

WPF列表框具有與當前選擇的項目的兩個屬性:

  • 的SelectedItem可用於結合,結合到所述第一選擇的項目。
  • SelectedItems(末尾有's')不可用於綁定。

啓用多的選擇,你要訪問SelectedItems但不幸的是,你不能給它綁定

可以使用代碼隱藏此限制。 創建屬性命名SelectedItems將包含選擇,然後訂閱SelectionChanged事件:

<ListBox x:Name="ItemsListBox" SelectionMode="Multiple" Height="300" 
          ItemsSource="{Binding ResultSet}" 
     SelectionChanged="ListBox_SelectionChanged"> 


private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    foreach (string item in e.RemovedItems) 
    { 
     SelectedItems.Remove(item); 
    } 

    foreach (string item in e.AddedItems) 
    { 
     SelectedItems.Add(item); 
    } 
} 
+1

好的一個,如果你使用命令綁定選擇改變,將它標記爲答案。將用Binding更新代碼並讓我們看看。後面的代碼不是一個好主意 – Simsons 2013-03-07 10:48:38

1

你的問題應該是這樣的。

如何從MVVM中的列表框中獲取多個選定的項目?

那麼,你有下面的stackoverflow線程的答案。

link 1

link 2

簡單的,你可以定義你的ResultSet視圖模型IsSelected財產。然後,如果您想要在任何時候獲取選定項目,只需從ResultSet中獲取「IsSelected」屬性設置爲true的項目即可。

1

你也可以創建一個附加的行爲
這裏是一個Example如何做到這一點

相關問題