public void SetValue(T param) { if (param == Value) { return; } var holder = GetHolder(param); var old_value = holderedValue; var new_value = holder; var cmd = new Command.DelegateCommand( () => { holderedValue = new_value; }, () => { holderedValue = old_value; }); Command.CommandManager.Execute(cmd); }