对于ListView,我可以从列表中选择多个项目,如果我选择一个项目,将调用所选索引的方法。但是我一次选择多个我的'TheSelectedIndex'方法没有被调用。我希望它可以被任何类型的选择调用。零项目,1项超过1项。我该如何设置呢?非常感谢你!
<ListView
SelectionMode="Multiple"
SelectedIndex="{Binding Path="TheSelectedIndex}"
ItemsSource="{Binding Path=Object}">
答案 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事件