void SiteRDEControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { var site = DataContext as RDESiteViewModel; if (site != null) { if (_currentSite != null) { // although the database actions are registered for new/modified traits, we need to keep track of them so we can // redisplay them as the user flips around the different sites. _currentSite.Traits = _traits.GetModel(); } _traits.BindModel(site.Traits, site); _currentSite = site; // There is a datacontext change cascade problem here. // When the RDE frame advances/retreats its first changes the data context on the various RDE Panels (this one included) // but our downstream dependents have yet to have their datacontexts changed (e.g. the position control, and it's descendants // still point to the old site). This means when we clear the control (several lines down), it was actually clearing the old site as well as the control // text boxes. So the datacontext for the position control is explicitly set here so that it is correctly bound to the new site // when it is cleared. // NOTE: have tried dispatching the call (kind of like invokeLater) and it didn't work. ctlPosition.DataContext = site; if (!site.Latitude.HasValue || !site.Longitude.HasValue || (site.Latitude.Value == 0 && site.Longitude.Value == 0)) { ctlPosition.Clear(); } } }
private void LoadSiteTemplate(int templateId) { var service = new MaterialService(User); var list = service.GetRDESites(templateId); if (list != null && list.Count > 0) { _siteTemplate = CreateSiteViewModel(list[0], false); } else { _siteTemplate = null; } if (_siteTemplate != null) { mnuSetSiteTemplate.Header = String.Format("Set _Site Template ({0}) ...", _siteTemplate.SiteName); Config.SetProfile(User, ConfigSiteTemplateId, templateId); } else { mnuSetSiteTemplate.Header = "Set _Site Template..."; Config.SetProfile(User, ConfigSiteTemplateId, -1); } }
private RDESiteVisitViewModel CreateSiteVisitViewModel(RDESiteVisit visit, RDESiteViewModel site) { var vm = new RDESiteVisitViewModel(visit); vm.DataChanged += SiteVisitViewModelDataChanged; vm.Site = site; vm.SiteID = site.SiteID; vm.Locked = !User.HasPermission(PermissionCategory.SPARC_SITEVISIT, PERMISSION_MASK.UPDATE) || _startLockMode; site.SiteVisits.Add(vm); return vm; }
private RDESiteViewModel CreateSiteViewModel(RDESite site, bool addChangedHandler = true) { var supportService = new SupportService(User); var vm = new RDESiteViewModel(site) { Locked = !User.HasPermission(PermissionCategory.SPARC_SITE, PERMISSION_MASK.UPDATE) || _startLockMode }; if (site.SiteID >= 0) { vm.Traits = supportService.GetTraits(TraitCategoryType.Site.ToString(), site.SiteID); } if (addChangedHandler) { vm.DataChanged += SiteViewModelDataChanged; } return vm; }
private RDESiteVisitViewModel AddNewSiteVisit(RDESiteViewModel site) { var sv = CreateNewSiteVisit(); var siteVisit = new RDESiteVisitViewModel(sv) {Site = site, SiteID = site.SiteID}; site.SiteVisits.Add(siteVisit); siteVisit.DataChanged +=SiteVisitViewModelDataChanged; RegisterPendingChange(new InsertRDESiteVisitCommand(siteVisit.Model, site.Model)); RegisterPendingChange(new UpdateRDESiteVisitCommand(siteVisit.Model) { SuccessAction = () => siteVisit.Touch() }); return siteVisit; }
private void AddNewSite(bool createNewMaterial = true) { // First add the site List<Trait> traits; var site = CreateNewSite(out traits); var siteViewModel = new RDESiteViewModel(site); siteViewModel.DataChanged += SiteViewModelDataChanged; RegisterPendingChange(new InsertRDESiteCommand(site)); RegisterUniquePendingChange(new UpdateRDESiteCommand(site)); if (traits != null && traits.Count > 0) { foreach (Trait t in traits) { siteViewModel.Traits.Add(t); RegisterPendingChange(new UpdateTraitDatabaseCommand(t, siteViewModel)); } } // and a new visit var siteVisitViewModel = AddNewSiteVisit(siteViewModel); // and some material... if (createNewMaterial) { AddNewMaterial(siteVisitViewModel); } // Add the new site to the group and select it... grpSites.Items.Add(siteViewModel); grpSites.SelectedItem = siteViewModel; }