Listview选择多个索引

时间:2011-05-31 13:09:06

标签: wpf

对于ListView,我可以从列表中选择多个项目,如果我选择一个项目,将调用所选索引的方法。但是我一次选择多个我的'TheSelectedIndex'方法没有被调用。我希望它可以被任何类型的选择调用。零项目,1项超过1项。我该如何设置呢?非常感谢你!

<ListView
           SelectionMode="Multiple"
           SelectedIndex="{Binding Path="TheSelectedIndex}"
           ItemsSource="{Binding Path=Object}">

2 个答案:

答案 0 :(得分:1)

处理此问题的一种方法是确保绑定ItemsSource属性的类型公开 IsSelected 属性。这可能意味着将该类型包装到一个自定义的ViewModel类中,该类只是公开底层类型并添加一个IsSelected属性。

一旦将选择状态的概念引入绑定集合中的各个项目,您就可以利用 ListView.SelectionChanged 事件和一些代码隐藏来访问视图模型(假设您'重新使用MVVM,我认为你是,考虑你的绑定):

在XAML ......

<ListView SelectionChanged="ListView_SelectionChanged" />

在代码隐藏中......

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var vm = (MyViewModel)DataContext;
    var selectedItems = ((ListView)sender).SelectedItems.Cast<SomeType>();        

    vm.SetSelectedItems(selectedItems);
}

在视图模型中......

public void SetSelectedItems(IEnumerable<SomeType> selectedItems)
{
    /* Remove items that were previously selected but no longer are selected */
    var currentlySelectedItems = MyItems.Where(i => i.IsSelected == true);
    foreach (var previouslySelectedItem in currentlySelectedItems.Except(selectedItems))
        previouslySelectedItem.IsSelected = false;

    /* Set the selection state on all currently/newly selected items */
    foreach (var selectedItem in selectedItems)
        selectedItem.IsSelected = true;

    NotifyOfPropertyChanged(() => MyItems);
}

在SomeType中,它是集合中每个项目的视图模型包装器......

public bool IsSelected { get; set; }

答案 1 :(得分:0)

您必须使用SelectionChanged事件