2010-05-06 71 views
2

我有一个WPF中的SelectionMode设置为多个列表框,并可以多选列表框中的项目。但是,SelectedItem没有更新它绑定的Observable集合。将列表框SelectedItem绑定到Observable集合?

有没有办法将多个选定的项目从ListBox绑定到Observable集合?

+0

http://stackoverflow.com/questions/803216/managing-multiple-的可能重复选择与 - MVVM – Will 2010-05-06 12:43:12

回答

1

我不知道mvvm这样做的方式, 我有一个工作解决方案,包含mvvm &代码隐藏。

代码隐藏

private void lstbox_SelectionChanged_1(object sender, SelectionChangedEventArgs e) 
    { 
     var listBox = sender as ListBox; 
     if (listBox == null) return; 

     var viewModel = listBox.DataContext as Window1ViewModel; 
     if (viewModel == null) return; 

     viewModel.ListOfSelectedItems.Clear(); 

     foreach (Window1ViewModel.States item in listBox.SelectedItems) 
     { 
      viewModel.ListOfSelectedItems.Add(item); 
     } 
     } 

视图模型

private ObservableCollection<States> _listofselecteditems; 
    public ObservableCollection<States> ListOfSelectedItems 
    { 
     get 
     { 
      return _listofselecteditems; 
     } 
     set 
     { 
      _listofselecteditems = value; 
      RaisePropertyChanged(() => ListOfSelectedItems); 
     } 
    } 

的XAML

  <ListBox x:Name="lstbox" 
      SelectionChanged="lstbox_SelectionChanged_1" 
      ItemsSource="{Binding StatesList,Mode=TwoWay}" 
      SelectionMode="Multiple" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <CheckBox 
         IsChecked="{Binding Path=IsSelected,Mode=TwoWay}" 
         Content="{Binding StateName}" /> 
        <TextBox Margin="8,0,0,0" Text="{Binding SOmeProperty}" IsEnabled="{Binding Path=IsSelected}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 

相关问题