我使用listview必须能够应对多选。为了实现它,我使用MultiSelection not working in ListView(Ankesh回答)中描述的解决方案。它工作正常。在我的应用程序中,一些计时器正在工作,它每10秒检索一次设备状态,并将ObservableCollection指定为ItemsSource到我的ListView,然后取消选择我选择的行。
我认为当我在将数据重新加载到临时变量之前存储所选项目并稍后分配它会起作用,但我有一些我无法诊断的问题。
这是我的代码(重新加载数据块):
if (SelectedMachines != null)
{
foreach (var selectedMachine in SelectedMachines)
{
oldSelected.Add(selectedMachine.Clone()); // clone objects
}
SelectedMachines.Clear();
}
Machines = Controller.GetAutomats(); // assign data
if (SelectedMachines != null) // restore selection
{
foreach (var selectedMachine in oldSelected)
{
SelectedMachines.Add(Machines.Where(t => t.Id == selectedMachine.Id).FirstOrDefault());
// at this point SelectedMachines has same elements count as before assign
}
}
不幸的是,这些代码在重新加载数据后会清除选择。