/// <inheritdoc /> public void StopObserving(TKey id, ObservableUpdateType updateType, Action <TValue> onUpdate) { switch (updateType) { case ObservableUpdateType.Added: if (_onAddActions.TryGetValue(id, out var addList)) { addList.Remove(onUpdate); } break; case ObservableUpdateType.Updated: if (_onUpdateActions.TryGetValue(id, out var updateList)) { updateList.Remove(onUpdate); } break; case ObservableUpdateType.Removed: if (_onRemoveActions.TryGetValue(id, out var removeList)) { removeList.Remove(onUpdate); } break; default: throw new ArgumentOutOfRangeException(nameof(updateType), updateType, "Wrong update type"); } }
/// <inheritdoc /> public void Observe(TKey id, ObservableUpdateType updateType, Action <TValue> onUpdate) { switch (updateType) { case ObservableUpdateType.Added: if (!_onAddActions.TryGetValue(id, out var addList)) { addList = new List <Action <TValue> >(); _onAddActions.Add(id, addList); } addList.Add(onUpdate); break; case ObservableUpdateType.Updated: if (!_onUpdateActions.TryGetValue(id, out var updateList)) { updateList = new List <Action <TValue> >(); _onUpdateActions.Add(id, updateList); } updateList.Add(onUpdate); break; case ObservableUpdateType.Removed: if (!_onRemoveActions.TryGetValue(id, out var removeList)) { removeList = new List <Action <TValue> >(); _onRemoveActions.Add(id, removeList); } removeList.Add(onUpdate); break; default: throw new ArgumentOutOfRangeException(nameof(updateType), updateType, "Wrong update type"); } }
/// <inheritdoc /> public void StopObserving(ObservableUpdateType updateType, Action <TValue> onUpdate) { _genericUpdateActions[(int)updateType].Remove(onUpdate); }
/// <inheritdoc /> public void Observe(ObservableUpdateType updateType, Action <TValue> onUpdate) { _genericUpdateActions[(int)updateType].Add(onUpdate); }
/// <inheritdoc /> public void InvokeObserve(TKey id, ObservableUpdateType updateType, Action <TValue> onUpdate) { onUpdate(_list[FindIndex(id)]); Observe(id, updateType, onUpdate); }