2

我有一个列表视图绑定到实体对象的集合视图(称为消息)

当消息对象集合更改(调度程序计时器)时,会触发列表视图项绑定刷新。

发生这种情况时,列表视图中当前选定的项目将被取消选择。

如何对 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”。存在显式转换(您是否缺少演员表?)

也许有更好的方法来使用集合中更改的项目填充列表视图?没有把握。

4

1 回答 1

0

简短的回答是“你没有”。

如果您已将 Listview 绑定ItemSource到 ViewModel 上的集合,则在 ViewModel 上为所选项目创建一个属性(aDependencyProperty或带有 的 POCO INotifyPropertyChanged)并将 Listview 的SelectedItem属性绑定到该属性。

当您在 Listview 中选择一个项目时,该属性值将被更新,并且使用该属性更改 ViewModel 中的值将更新 Listview 中的选择。使用 MVVM 和绑定,真的不需要从 ViewModel 或其他任何地方访问视图控件等,包括代码隐藏。

于 2012-11-22T03:14:17.527 回答