fix: possible edge case (or kind of)

sample calibration view model move brand combobox editing on database changing to uI thread
This commit is contained in:
2026-06-20 11:58:14 +03:00
parent dc8593f840
commit caee9fafd5
@@ -231,6 +231,11 @@ public partial class SampleCalibrationViewModel : ViewModelBase
BrandComboBoxItems = new ObservableCollection<BrandComboBoxItemViewModel>(_context.BrandRecords.Select(r => new BrandComboBoxItemViewModel(r.Id, r.BrandName, r.MixtureName))); BrandComboBoxItems = new ObservableCollection<BrandComboBoxItemViewModel>(_context.BrandRecords.Select(r => new BrandComboBoxItemViewModel(r.Id, r.BrandName, r.MixtureName)));
// Подписываемся на изменения базы данных для отслеживания изменений списка марок // Подписываемся на изменения базы данных для отслеживания изменений списка марок
_context.ChangeTracker.StateChanged += (_, ea) => _context.ChangeTracker.StateChanged += (_, ea) =>
{
// Обновляем данные в интерфейсе
// Dispatcher.UIThread.Invoke нужен потому-что этот метод может (и скорее всего будет) вызван в другом потоке,
// а изменения данных в интерфейсе могут быть вызваны только из потока в котором интерфейс был создан
_ = Dispatcher.UIThread.InvokeAsync(() =>
{ {
// Если запись не интересует нас, то ничего не делаем // Если запись не интересует нас, то ничего не делаем
if (ea.Entry.Entity is not BrandRecord brandRecord) if (ea.Entry.Entity is not BrandRecord brandRecord)
@@ -276,6 +281,7 @@ public partial class SampleCalibrationViewModel : ViewModelBase
editedComboBoxItem.BrandName = brandRecord.BrandName; editedComboBoxItem.BrandName = brandRecord.BrandName;
editedComboBoxItem.MixtureName = brandRecord.MixtureName; editedComboBoxItem.MixtureName = brandRecord.MixtureName;
} }
});
}; };
// Подписываемся на изменения свойств для обновления CanScroll // Подписываемся на изменения свойств для обновления CanScroll