/// <summary> /// Responds to the save command from the current (sub) view model. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _currentViewModel_OnSaved(object sender, System.EventArgs e) { if (CurrentViewModel is VirtualHostVM) { var vHost = ((VirtualHostVM)CurrentViewModel).SelectedVirtualHost; if (vHost == null) { return; } var old = VirtualHosts.FirstOrDefault(p => p.Id == vHost.Id); if (old == null) { VirtualHosts.Add(vHost); } else { var idx = VirtualHosts.IndexOf(old); VirtualHosts.Remove(old); VirtualHosts.Insert(idx, vHost); } // This bypasses the INotify event. // Currently there doesn't seem much point firing the event, but this may change later. _selectedVirtualHost = vHost; } else if (CurrentViewModel is HostFileEntryVM) { var host = ((HostFileEntryVM)CurrentViewModel).CurrentHostFileEntry; if (host == null) { return; } var old = HostFileEntries.FirstOrDefault(p => p.Id == host.Id); if (old == null) { HostFileEntries.Add(host); } else { var idx = HostFileEntries.IndexOf(old); HostFileEntries.Remove(old); HostFileEntries.Insert(idx, host); } // This bypasses the INotify event. // Currently there doesn't seem much point firing the event, but this may change later. _selectedHostFileEntry = host; } }
/// <summary> /// Sets associated objects when required. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _objectViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e == null) { return; } object obj = null; switch (e.PropertyName) { case "CurrentHostFileEntry": // Set the backing value so we skip the actions that occur when assigning to the public property. _selectedVirtualHost = VirtualHosts.FirstOrDefault( p => p.ServerName == SelectedHostFileEntry.Url || p.ServerAlias == SelectedHostFileEntry.Url); // Assign found value to obj, even if null as this will tell the viewmodel to clear the property. obj = _selectedVirtualHost; // Now we need to raise the property changed event on the changed property to allow UI to react. OnPropertyChanged("SelectedVirtualHost"); break; case "SelectedVirtualHost": _selectedHostFileEntry = HostFileEntries.FirstOrDefault( p => p.Url == SelectedVirtualHost.ServerName || p.Url == SelectedVirtualHost.ServerAlias); obj = _selectedHostFileEntry; OnPropertyChanged("SelectedHostFileEntry"); break; default: // If not a property we want to act on we should return to prevent setting unwanted values. return; } CurrentViewModel.SetAssociatedObject(obj); }