public PersonViewModel(IPropertyProviderFactory propertyProviderFactory, IMessageBus messageBus, IDialogService dialogService, Person model) { _model = model; var pp = propertyProviderFactory.Create <IPersonViewModel>(this); // creating properties _name = pp.CreateProperty(i => i.Name, model.Name); _surname = pp.CreateProperty(i => i.Surname, model.Surname); _age = pp.CreateProperty(i => i.Age, model.Age); _address1 = pp.CreateProperty(i => i.Address1, model.Address1); _address2 = pp.CreateProperty(i => i.Address2, model.Address2); _address3 = pp.CreateProperty(i => i.Address3, model.Address3); _city = pp.CreateProperty(i => i.City, model.City); // creating commands _editCommand = pp.CreateCommand <Unit>(i => i.EditCommand); _saveCommand = pp.CreateCommand <Unit>(i => i.SaveCommand, !string.IsNullOrEmpty(model.Name) && !string.IsNullOrEmpty(model.Surname)); _deleteCommand = pp.CreateCommand <Unit>(i => i.DeleteCommand); _closeCommand = pp.CreateCommand <Unit>(i => i.CloseCommand); // Observing commands ShouldDispose(_name.CombineLatest(_surname, (n, s) => !string.IsNullOrEmpty(n) && !string.IsNullOrEmpty(s)).Subscribe(_saveCommand.SetCanExecute)); ShouldDispose(_saveCommand.OnExecute.Subscribe(_ => { UpdateModel(); _closeSubject.OnNext(true); })); ShouldDispose(_editCommand.OnExecute.Subscribe(_ => dialogService.ShowViewModel("Edit Person", this))); ShouldDispose(_deleteCommand.OnExecute.Subscribe(_ => messageBus.Publish(new DeletePersonMessage(this)))); ShouldDispose(_closeCommand.OnExecute.Subscribe(_ => { ResetData(); _closeSubject.OnNext(false); })); }
public static DependencyProperty ResolveProperty(IPropertySubject interactivityObject) { if (((InteractivityObject)interactivityObject).IsLoaded == false) { return(null); } var propertyKind = interactivityObject.PropertyKind; var isResolved = IsResolved(interactivityObject); if (isResolved) { return(interactivityObject.PropertyStore as DependencyProperty); } switch (propertyKind) { case PropertyKind.Explicit: interactivityObject.PropertyKind |= PropertyKind.Resolved; return((DependencyProperty)interactivityObject.PropertyStore); case PropertyKind.Implicit: { var subject = interactivityObject.ActualSubject; if (subject == null) { return(null); } var resolvedProperty = DependencyPropertyManager.GetDependencyProperty((string)interactivityObject.PropertyStore, subject.GetType()); if (resolvedProperty != null) { interactivityObject.PropertyStore = resolvedProperty; } interactivityObject.PropertyKind |= PropertyKind.Resolved; return(resolvedProperty); } case PropertyKind.Expando: { var resolvedProperty = DependencyPropertyManager.GetExpandoProperty((string)interactivityObject.PropertyStore); interactivityObject.PropertyStore = resolvedProperty; interactivityObject.PropertyKind |= PropertyKind.Resolved; return(resolvedProperty); } } return(null); }
public MainViewModel(IPropertyProviderFactory propertyProviderFactory, IMessageBus messageBus, IDialogService dialogService, IPersonRepository personRepository, IPersonViewModelFactory personViewModelFactory) { var pp = propertyProviderFactory.Create<IMainViewModel>(this); //create properies _isBusy = pp.CreateProperty(i => i.IsBusy, false); // create commands _addNewClientCommand = pp.CreateCommand<Unit>(i => i.AddNewClientCommand); Clients = new ObservableCollection<IPersonViewModel>(); IsBusy = true; ShouldDispose(personRepository.GetAllClients().ObserveOnDispatcher().Subscribe(c => { foreach (var item in c.Select(personViewModelFactory.Create)) { Clients.Add(item); } IsBusy = false; })); ShouldDispose(messageBus.Subscribe<DeletePersonMessage>(m => { var msg = string.Format("Are you sure you want to delete {0} {1}?", m.Person.Name, m.Person.Surname); if (dialogService.ShowWarning("Delte", msg) == MessageBoxResult.OK) { IsBusy = true; ShouldDispose(personRepository.Delete(m.Person.ToModel()) .ObserveOnDispatcher() .Subscribe(_ => { Clients.Remove(m.Person); IsBusy = false; })); } })); ShouldDispose(_addNewClientCommand.OnExecute.Subscribe(_ => { var newClient = personViewModelFactory.Create(new Person()); if (dialogService.ShowViewModel("New Person", newClient as ViewModelBase)) { IsBusy = true; ShouldDispose(personRepository.Save(newClient.ToModel()) .ObserveOnDispatcher() .Subscribe(u => { Clients.Add(newClient); IsBusy = false; })); } })); }
public MainViewModel(IPropertyProviderFactory propertyProviderFactory, IMessageBus messageBus, IDialogService dialogService, IPersonRepository personRepository, IPersonViewModelFactory personViewModelFactory) { var pp = propertyProviderFactory.Create <IMainViewModel>(this); //create properies _isBusy = pp.CreateProperty(i => i.IsBusy, false); // create commands _addNewClientCommand = pp.CreateCommand <Unit>(i => i.AddNewClientCommand); Clients = new ObservableCollection <IPersonViewModel>(); IsBusy = true; ShouldDispose(personRepository.GetAllClients().ObserveOnDispatcher().Subscribe(c => { foreach (var item in c.Select(personViewModelFactory.Create)) { Clients.Add(item); } IsBusy = false; })); ShouldDispose(messageBus.Subscribe <DeletePersonMessage>(m => { var msg = string.Format("Are you sure you want to delete {0} {1}?", m.Person.Name, m.Person.Surname); if (dialogService.ShowWarning("Delte", msg) == MessageBoxResult.OK) { IsBusy = true; ShouldDispose(personRepository.Delete(m.Person.ToModel()) .ObserveOnDispatcher() .Subscribe(_ => { Clients.Remove(m.Person); IsBusy = false; })); } })); ShouldDispose(_addNewClientCommand.OnExecute.Subscribe(_ => { var newClient = personViewModelFactory.Create(new Person()); if (dialogService.ShowViewModel("New Person", newClient as ViewModelBase)) { IsBusy = true; ShouldDispose(personRepository.Save(newClient.ToModel()) .ObserveOnDispatcher() .Subscribe(u => { Clients.Add(newClient); IsBusy = false; })); } })); }
public static void SetExpandoProperty(IPropertySubject interactivityObject, string property) { if (ReferenceEquals(interactivityObject.PropertyStore, property)) { return; } UnResolveProperty(interactivityObject); interactivityObject.PropertyStore = property; interactivityObject.PropertyKind = PropertyKind.Expando; }
public static string GetExpandoProperty(IPropertySubject interactivityObject) { var propertyKind = interactivityObject.PropertyKind; var isResolved = IsResolved(interactivityObject); propertyKind &= PropertyKind.Unspecified; if (propertyKind == PropertyKind.Unspecified || propertyKind != PropertyKind.Expando) { return(null); } return(isResolved ? ((DependencyProperty)interactivityObject.PropertyStore).GetName() : (string)interactivityObject.PropertyStore); }
public static DependencyProperty ResolveProperty(IPropertySubject interactivityObject, Type targetType) { var propertyKind = interactivityObject.PropertyKind & PropertyKind.Unspecified; switch (propertyKind) { case PropertyKind.Explicit: return((DependencyProperty)GetProperty(interactivityObject)); case PropertyKind.Implicit: return(DependencyPropertyManager.GetDependencyProperty(GetProperty(interactivityObject) as string, targetType)); case PropertyKind.Expando: return(DependencyPropertyManager.GetExpandoProperty(GetExpandoProperty(interactivityObject))); } return(null); }
public static void CopyFrom(IPropertySubject target, IPropertySubject source) { var propertyKind = source.PropertyKind & PropertyKind.Unspecified; switch (propertyKind) { case PropertyKind.Expando: SetExpandoProperty(target, GetExpandoProperty(source)); break; case PropertyKind.Explicit: SetProperty(target, GetProperty(source)); break; case PropertyKind.Implicit: SetProperty(target, GetProperty(source)); break; } }
public static void SetProperty(IPropertySubject interactivityObject, object property) { if (ReferenceEquals(interactivityObject.PropertyStore, property)) { return; } UnResolveProperty(interactivityObject); if (property is DependencyProperty dependencyProperty) { interactivityObject.PropertyStore = dependencyProperty; interactivityObject.PropertyKind = PropertyKind.Explicit; } if (property is string stringProperty) { interactivityObject.PropertyStore = stringProperty; interactivityObject.PropertyKind = PropertyKind.Implicit; } }
public static object GetProperty(IPropertySubject interactivityObject) { var propertyKind = interactivityObject.PropertyKind; propertyKind &= PropertyKind.Unspecified; var property = interactivityObject.PropertyStore; switch (propertyKind) { case PropertyKind.Unspecified: return(null); case PropertyKind.Explicit: return((DependencyProperty)property); case PropertyKind.Implicit: return(property as string ?? ((DependencyProperty)property).GetName()); } return(null); }
public static void UnResolveProperty(IPropertySubject interactivityObject) { if (IsResolved(interactivityObject) == false || IsSpecified(interactivityObject) == false) { return; } var propertyKind = interactivityObject.PropertyKind & PropertyKind.Unspecified; switch (propertyKind) { case PropertyKind.Implicit: interactivityObject.PropertyStore = GetProperty(interactivityObject); break; case PropertyKind.Expando: interactivityObject.PropertyStore = GetExpandoProperty(interactivityObject); break; } interactivityObject.PropertyKind &= PropertyKind.Unspecified; }
public static DependencyProperty GetServiceProperty(IPropertySubject interactivityObject) { var propertyKind = interactivityObject.PropertyKind; var isResolved = (propertyKind & PropertyKind.Resolved) != 0; propertyKind &= PropertyKind.Unspecified; if (propertyKind == PropertyKind.Unspecified) { return(null); } if (propertyKind == PropertyKind.Explicit) { return((DependencyProperty)interactivityObject.PropertyStore); } if (propertyKind == PropertyKind.Expando) { if (isResolved) { return((DependencyProperty)interactivityObject.PropertyStore); } var resolvedProperty = DependencyPropertyManager.GetExpandoProperty((string)interactivityObject.PropertyStore); interactivityObject.PropertyStore = resolvedProperty; interactivityObject.PropertyKind |= PropertyKind.Resolved; return(resolvedProperty); } var propertyName = interactivityObject.PropertyStore as string ?? ((DependencyProperty)interactivityObject.PropertyStore).GetName(); return(DependencyPropertyProxyManager.GetDependencyProperty(propertyName)); }
public PersonViewModel(IPropertyProviderFactory propertyProviderFactory, IMessageBus messageBus, IDialogService dialogService, Person model) { _model = model; var pp = propertyProviderFactory.Create<IPersonViewModel>(this); // creating properties _name = pp.CreateProperty(i => i.Name, model.Name); _surname = pp.CreateProperty(i => i.Surname, model.Surname); _age = pp.CreateProperty(i => i.Age, model.Age); _address1 = pp.CreateProperty(i => i.Address1, model.Address1); _address2 = pp.CreateProperty(i => i.Address2, model.Address2); _address3 = pp.CreateProperty(i => i.Address3, model.Address3); _city = pp.CreateProperty(i => i.City, model.City); // creating commands _editCommand = pp.CreateCommand<Unit>(i => i.EditCommand); _saveCommand = pp.CreateCommand<Unit>(i => i.SaveCommand, !string.IsNullOrEmpty(model.Name) && !string.IsNullOrEmpty(model.Surname)); _deleteCommand = pp.CreateCommand<Unit>(i => i.DeleteCommand); _closeCommand = pp.CreateCommand<Unit>(i => i.CloseCommand); // Observing commands ShouldDispose(_name.CombineLatest(_surname, (n,s) => !string.IsNullOrEmpty(n) && !string.IsNullOrEmpty(s)).Subscribe(_saveCommand.SetCanExecute)); ShouldDispose(_saveCommand.OnExecute.Subscribe(_ => { UpdateModel(); _closeSubject.OnNext(true); })); ShouldDispose(_editCommand.OnExecute.Subscribe(_ => dialogService.ShowViewModel("Edit Person", this))); ShouldDispose(_deleteCommand.OnExecute.Subscribe(_ => messageBus.Publish(new DeletePersonMessage(this)))); ShouldDispose(_closeCommand.OnExecute.Subscribe(_ => { ResetData(); _closeSubject.OnNext(false); })); }
public static bool IsSpecified(IPropertySubject target) { return((target.PropertyKind & PropertyKind.Unspecified) != PropertyKind.Unspecified); }
public static bool IsResolved(IPropertySubject target) { return((target.PropertyKind & PropertyKind.Resolved) != 0); }