public void RegisterDebugValue <TObservableProperties>(float stepLength, string name, float defaultValue, TObservableProperties observableProperties, Action <TObservableProperties, float> propertySetter) where TObservableProperties : class, IObservableProperties { var debuggableValue = new DebuggableValueModel { Name = name, StepLength = stepLength }; bool saveDoesNotExist = !SaveService.TryLoad(debuggableValue); if (saveDoesNotExist) { debuggableValue.Value = defaultValue; SaveValue(debuggableValue); } observableProperties .Bind <TObservableProperties, float>(val => propertySetter(observableProperties, val)) .ToProperty(debuggableValue, dv => dv.Value, nameof(DebuggableValueModel.Value)); DebuggableValuesContainer.Add(debuggableValue); }