如何将列表框选定项分配给源属性
本文关键字:分配 属性 列表 | 更新日期: 2023-09-27 18:02:38
我希望当用户选择一个或多个项目时,我的源属性得到更新。我已经尝试过绑定模式OneWayToSource,但这没有帮助。下面是XAML和ViewModel代码:
<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");
}
}
我已经采取了使用附加行为的方法,它的工作,但有任何更简单的方法吗?
你的问题应该是这样的。
如何从列表框中获得多个选定的项目在WPF与MVVM?
你可以从下面的stackoverflow线程中得到答案。
链接1
链接2
您可以简单地在ResultSet视图模型中定义IsSelected
属性。然后,如果您想在任何时候获得选中的项目,只需从ResultSet中获取"IsSelected"属性设置为true的项目。
你也可以创建一个附加行为
下面是一个示例
WPF ListBox有两个与当前选中项相关的属性:
- 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);
}
}