我希望当用户选择我的源属性更新的一个或多个项目时。我尝试过绑定模式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");
}
}
我已经采用了附加行为的方法并且它有效,但是有更简单的方法吗?
答案 0 :(得分:1)
你的问题应该是这样的。
如何使用MVVM从WPF中的ListBox中获取多个选定项目?
嗯,你有以下stackoverflow线程的答案。
只需在ResultSet视图模型中定义IsSelected
属性即可。然后,如果您想在任何时候获取所选项,只需从ResultSet中获取“IsSelected”属性设置为true的项目。
答案 1 :(得分:1)
您还可以创建附加行为
这是一个Example怎么做
答案 2 :(得分:0)
WPF ListBox有两个与当前所选项目相关的属性:
启用多选时,您希望能够访问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);
}
}