Я реализовал INotifyCollectionChanged для привязки к моей ObservableCollection, которая все работает нормально.Однако мои данные о моей коллекции поступают из веб-сервиса JSON, и есть другие системы, которые обновляют его, а также мое приложение.Поэтому мне нужно время от времени обновлять JSON для своей коллекции.
Я могу обновить коллекцию с помощью таймера, который все работает нормально, однако, когда я делаю это, экран мигает, поскольку я предполагаю, что он перерисовываетЭкран, который выглядит ужасно, поэтому мне стало интересно, есть ли способ его остановить.Очевидно, что интерфейс INotifyCollectionChanged не слишком помогает в этой ситуации, так как приложение не изменило коллекцию, но может иметь другое приложение, поэтому мне нужно обновить свою коллекцию, чтобы она была актуальной, прежде чем я внесу какие-либо дальнейшие изменения, где я могу использоватьинтерфейс INotifyCollectionChanged и остановите мигание обновления!
Некоторый код, если это помогает, ниже моя коллекция ObservableCollection:
private WebJSON _webjson;
private ObservableCollection<Group> _groups;
private ObservableCollection<Group> Groups
{
get { return _groups; }
set
{
if (_groups != value)
{
_groups = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Groups)));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
В моем главном конструкторе у меня есть:
public TestPage()
{
this.InitializeComponent();
DispatcherTimer timer;
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(60000);
timer.Tick += async (s, e) =>
{
Groups = new ObservableCollection<Group>(await _webjson.GetGroupsAsync());
};
timer.Start();
}
Это бит, который мигает или мигает на экране, когда таймер обновляет данные из моего класса webjson.Webjson.GetGroupsAsync - это класс, который переходит к JSON API и получает данные. Я не включил этот код, поскольку не считаю его актуальным.
Все обновления, которые я выполняю в приложении, работаютхорошо, это просто получение данных заново из JSON API по таймеру, которое вызывает мерцание экрана.То же самое происходит, если я реализую обновление вручную на кнопке или на панели команд и т. Д.
Тогда я просто использую x: Bind для привязки данных к GridView, как вы это сделали.
Iтакже пытался использовать стандартный таймер, и когда он запускает вызов:
private async Task Refresh()
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, async () =>
{
Groups = new ObservableCollection<Group>(await _webjson.GetGroupsAsync());
});
}
и происходит то же самое мигание / мигание.
Есть ли в любом случае повторное получение данных из JSON API и обновление моегоgridview без этого раздражающего обновления мигает?
Спасибо