如何将列表框选定项分配给源属性

本文关键字:分配 属性 列表 | 更新日期: 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);
    }
}