Я думаю, вам нужно создать слой между вашими данными и сеткой данных.
Предположим, что ваши данные относятся к типу List и в данный момент они привязаны к вашей DataGrid.
Нам понадобится некоторый класс-оболочка для ваших данных (для одной строки в данном случае).Эта обертка deffers свойство изменилось и запускает его регулярно.Обратите внимание: я написал этот код наизусть без какого-либо тестирования, могут быть (и будут) ошибки.Он также не является поточно-ориентированным, вам нужно добавить некоторые блокировки при работе со списком.Но точка должна быть достигнута.
public class LazyRecord : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
OnPropertyChanged("Name");
}
}
// other properties
// now the important stuff - deffering the update
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (this.changedProperties.Find(propertyName) == null)
this.changedProperties.Add(propertyName);
}
private readonly List<string> changedProperties = new List<string>();
// and the timer that refreshes the data
private readonly Timer timer;
private readonly Record record;
public LazyRecord(Record record)
{
this.timer = new Timer(1000, OnTimer);
this.record = record;
this.record.OnPropertyChanged += (o, a) => this.OnPropertyChanged(a.PropertyName);
}
public void OnTimer(..some unused args...)
{
if (this.PropertyChanged != null)
{
foreach(string propNAme in changedProperties)
{
PropertyChanged(new PropertyChangedEventArgs(propName));
}
}
}
После этого просто создайте List из вашего List и используйте его в качестве источника данных.Очевидно, что просто использовать универсальное решение, которое гораздо более пригодно для повторного использования.Надеюсь, я немного помог.