如何将ListBox选定项目分配给源属性

时间:2013-03-07 10:25:12

标签: c# wpf data-binding mvvm xaml-binding

我希望当用户选择我的源属性更新的一个或多个项目时。我尝试过绑定模式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");
    }
}

我已经采用了附加行为的方法并且它有效,但是有更简单的方法吗?

3 个答案:

答案 0 :(得分:1)

你的问题应该是这样的。

  

如何使用MVVM从WPF中的ListBox中获取多个选定项目?

嗯,你有以下stackoverflow线程的答案。

link 1

link 2

只需在ResultSet视图模型中定义IsSelected属性即可。然后,如果您想在任何时候获取所选项,只需从ResultSet中获取“IsSelected”属性设置为true的项目。

答案 1 :(得分:1)

您还可以创建附加行为
这是一个Example怎么做

答案 2 :(得分:0)

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);
    }
}