我有一个listview绑定到Entity对象的集合视图(称为Message)
当Message Objects集合发生更改(dispatchertimer)时,将触发listview项绑定刷新。
发生这种情况时,将取消选择列表视图中当前选定的项目。
如何在listview项集合上进行LINQ搜索以查找某个id的消息对象并重新选择它?
int id = ((Message)lvMessages.SelectedItem).Id;
lvMessages.DataContext = service.Messages;
ICollectionView view = CollectionViewSource.GetDefaultView(lvMessages.ItemsSource);
view.Filter = new Predicate<object>(FilterMessageItem);
//var li = lvMessages.Items.Cast<Message>().Where(m => m.Id == id).SingleOrDefault();
lvMessages.SelectedItem = li;
我不确定如何设置Linq查询,因为我在注释行上收到此错误...
无法隐式转换类型 System.Collections.Generic.IEnumerable'到 'BusinessObjects.Message'。存在显式转换(是你 错过演员?)
也许有更好的方法来使用集合中更改的项目填充列表视图?不确定。
答案 0 :(得分:0)
简短的回答是“你没有”。
如果您已将Listview的ItemSource
绑定到ViewModel上的集合,则在ViewModel上为所选项创建一个属性(DependencyProperty
或带有INotifyPropertyChanged
的POCO)并将Listview的SelectedItem
属性绑定到该属性。
当您在Listview中选择一个项目时,将更新此属性值,并使用该属性更改ViewModel中的值将更新Listview中的选择。使用MVVM和绑定,实际上不需要从ViewModel或其他任何地方访问视图控件等,包括代码隐藏。