【发布时间】:2011-02-16 09:12:39
【问题描述】:
我在 WPF 中有一个 Listbox,其 SelectionMode 设置为 Multiple,并且可以多选 Listbox 中的项目。但是,SelectedItem 不会更新它所绑定的 Observable Collection。
有没有办法将 ListBox 中的多个选定项绑定到 Observable Collection?
【问题讨论】:
标签: wpf listbox selecteditem
我在 WPF 中有一个 Listbox,其 SelectionMode 设置为 Multiple,并且可以多选 Listbox 中的项目。但是,SelectedItem 不会更新它所绑定的 Observable Collection。
有没有办法将 ListBox 中的多个选定项绑定到 Observable Collection?
【问题讨论】:
标签: wpf listbox selecteditem
我不知道 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>
【讨论】: