数据网格-当新数据到达时,网格选择被重置
本文关键字:数据 网格 选择 数据网 新数据 | 更新日期: 2023-09-27 18:15:22
我有这样的DataGrid
<DataGrid AutoGenerateColumns="True" HorizontalAlignment="Stretch" Name="dataGrid1" VerticalAlignment="Stretch" ItemsSource="{Binding DataList}" IsReadOnly="True"/>
在我的ViewModel我有这样的字段:
public ObservableCollection<ConsoleData> DataList { get; set; }
这样的方法每秒被调用:
private void model_DataArrived(List<ConsoleData> dataList)
{
DataList.Clear();
dataList.ForEach(x => DataList.Add(x));
}
Grid显示一些实时数据并每秒更新。
问题是-当我在网格中选择一些行时,选择在一秒钟后重置(当新数据到达时)。
我猜这可能是因为我每次都Clear
DataList
?
如何解决这个问题?
在清除之前,选择当前选中的项目(如果你有一个唯一标识符),然后尝试在更新时再次突出显示它,如果它不再存在,就不要突出显示任何东西
我过去建立更新列表的方法是:
-
创建一个
Update
方法在你的对象(ConsoleData
),你可以传递该对象的副本和对象更新自己。对象还需要实现INotifyPropertyChanged
。 -
在ViewModel的
model_DataArrived
方法中找到所有匹配的对象,并使用步骤1中的Update
方法来更新对象。 -
查找所有新对象并将它们添加到您的列表(
DataList
)。 -
找到所有丢失的对象并将其从您的列表(
DataList
)中删除。
如果新的数据源仍然包含您最后选择的项目,如果您遵循MVVM模式。您所需要做的就是在数据源重新加载后为selecetdItem
引发PropertyChanged
事件。确保你的viemModel实现了INotifyPropertyChanged
接口。
编辑
如果你不想时不时地清除你的数据源。简单地说,使用ObservableCollection来代替泛型列表。它内部实现了INotifyCollectionChanged
,所以任何添加或删除的项目在您的集合将反映在您的UI