2

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

我已经通过使用附加行为采取了这种方法并且它有效,但是有没有更简单的方法?

4

3 回答 3

1

你的问题应该是这样的。

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

好吧,您可以从以下 stackoverflow 线程中得到答案。

链接 1

链接 2

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

于 2013-03-07T12:07:52.727 回答
1

你也可以
在这里创建一个附加行为是一个如何做的例子

于 2013-03-13T09:04:37.160 回答
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);
    }
}
于 2013-03-07T10:38:24.057 回答