将列表框SelectedItem绑定到Observable Collection?

时间:2010-05-06 12:26:16

标签: wpf listbox selecteditem

我在WPF中有一个Listbox,其SelectionMode设置为Multiple,并且可以多选列表框中的项目。但是,SelectedItem不会更新它所绑定的Observable Collection。

有没有办法将ListBox中的多个选定项绑定到Observable Collection?

1 个答案:

答案 0 :(得分: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);
        }
      }

ViewModel

    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>