class EditorViewModel : AbstractViewModel
readonly IChangeTrackingService service = new ChangeTrackingService();
var observer = MementoObserver.Monitor( this.service );
this.UndoCommand = DelegateCommand.Create()
.OnCanExecute( o => this.service.CanUndo )
.OnExecute( o => this.service.Undo() )
this.RedoCommand = DelegateCommand.Create()
.OnCanExecute( o => this.service.CanRedo )
.OnExecute( o => this.service.Redo() )
this.CreateNewAddressCommand = DelegateCommand.Create()
this.SelectedAddress = this.Entity.Addresses.AddNew();
this.DeleteAddressCommand = DelegateCommand.Create()
.OnCanExecute( o => this.SelectedAddress != null )
this.SelectedAddress.Delete();
this.SelectedAddress = this.Entity.Addresses.FirstOrDefault();
.AddMonitor( PropertyObserver.For( this ).Observe( v => v.SelectedAddress ) );
var person = new Person()
person.Addresses.Add( new Address( person )
var entity = new PersonViewModel();
entity.Initialize( person, false );
this.service.Attach( entity );
public ICommand UndoCommand { get; private set; }
public ICommand RedoCommand { get; private set; }
public ICommand CreateNewAddressCommand { get; private set; }
public ICommand DeleteAddressCommand { get; private set; }
public PersonViewModel Entity
get { return this.GetPropertyValue( () => this.Entity ); }
private set { this.SetPropertyValue( () => this.Entity, value ); }
public IEntityItemView<AddressViewModel> SelectedAddress
get { return this.GetPropertyValue( () => this.SelectedAddress ); }
private set { this.SetPropertyValue( () => this.SelectedAddress, value ); }