public ObservableRadioGroup(IEnumerable <Observable <T, bool> > tabs = null, int defaultIndex = 0, Action <UnityAction> onTryChange = null) { _defaultIndex = defaultIndex; _onTryChange = onTryChange; _tabs = tabs?.ToList() ?? new List <Observable <T, bool> >(); _currentIndex = defaultIndex; if (!_tabs.Any()) { return; } // set current tab on Observable <T, bool> current = _tabs[defaultIndex]; current.Value = true; for (var i = 0; i < _tabs.Count; i++) { var index = i; // store in local variable to access in closure Observable <T, bool> tab = _tabs[i]; ObservableValueChange <T, bool> listener = (sender, value) => TabValueChanged(index, value); _listeners.Add(listener); tab.Changed += listener; } }
public void Dispose() { for (var index = 0; index < _tabs.Count; index++) { Observable <T, bool> tab = _tabs[index]; ObservableValueChange <T, bool> listener = _listeners[index]; tab.Changed -= listener; } }
public void Add(Observable <T, bool> tab) { if (_tabs.Count == _defaultIndex) { tab.Value = true; } var index = _tabs.Count; _tabs.Add(tab); ObservableValueChange <T, bool> listener = (sender, value) => TabValueChanged(index, value); _listeners.Add(listener); tab.Changed += listener; }