Я использую DynamicData SourceCache Events
в моей модели.
У меня есть ViewModel, Connects
для SourceCache и Binds
элементы для ReadOnlyObservableCollection<EventViewModel>
, например, так:
EventSuite.Events
.Connect()
.AutoRefresh()
.Transform(e => new EventViewModel(e))
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(out _items)
.DisposeMany()
.Subscribe();
Я использую эту наблюдаемую коллекцию в своем представлении и вв какой-то момент я перебираю SourceCache в моей модели следующим образом (я также пытался использовать foreach для циклического перебора элементов):
for (int i=0; i < Events.Items.Count(); i++)
{
var @event = Events.Items.ElementAt(i);
@event.StartedAt = DateTime.UtcNow;
@event.State = await @event.RunAsync() ? "Passed" : "Failed";
@event.FinishedAt = DateTime.UtcNow;
await manager.ManufactureService.SaveJobItemEvent(JobID, JobItemID, @event)
}
EventViewModel
имеет следующее свойство, используемое для обновления статуса событияиндикатор в представлении при изменении Event.State
:
private ObservableAsPropertyHelper<bool> _passed;
public bool Passed => _passed.Value;
public EventViewModel(
_passed = this.WhenAnyValue(
x => x.State,
(state) => String.Equals(state, "passed", StringComparison.OrdinalIgnoreCase))
.ObserveOn(RxApp.MainThreadScheduler)
.Select(x => x)
.ToProperty(this, x => x.Passed, scheduler: RxApp.MainThreadScheduler);
)
Но представление никогда не обновляется. Существует ли правильный способ перебора SourceCache.Items, чтобы при обновлении / изменении элементов изменения распространялись.
Примечание: я попытался добавить следующую строку в конец цикла, который работално вместо обновления события существующее событие было удалено, а обновленное событие было добавлено в конец списка, что было отражено в представлении.
Events.AddOrUpdate(@event);