public CreateTestViewModel(ITestService testService,
                                   IToolboxViewModel toolboxViewModel,
                                   IFormSurfaceViewModel formSurfaceViewModel,
                                   IPropertiesViewModel propertiesViewModel,
                                   IPageService pageService)
            : base(pageService)
        {
            m_testService        = testService;
            ToolboxViewModel     = toolboxViewModel;
            FormSurfaceViewModel = formSurfaceViewModel;
            PropertiesViewModel  = propertiesViewModel;

            ConfirmCommand = new DelegateCommand(Confirm);
            CancelCommand  = new DelegateCommand(Cancel);
        }
    private void SelectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
      var applicableActionType = (e.Action == NotifyCollectionChangedAction.Add) ||
        (e.Action == NotifyCollectionChangedAction.Replace) ||
        (e.Action == NotifyCollectionChangedAction.Reset);
      
      if ((!applicableActionType) || (currentSelectionService.CurrentSelection.Count != 1))
      {
        Clear();
        return;
      }

      var selectedItem =  currentSelectionService.CurrentSelection.FirstOrDefault() as IView;
      if ((selectedItem == null) || (selectedItem.ViewModel == null))
      {
        Clear();
        return;
      }

      lastProperties = selectedItem.ViewModel.Properties;
      RecalculateItems();
    }
    public static IEnumerable<PropertySingleItem> Build(IPropertiesViewModel propertiesViewModel)
    {
      var propertySingleItems = new List<PropertySingleItem>();
      var connectorPropertiesViewModel = propertiesViewModel as ConnectorPropertiesViewModel;
      if (connectorPropertiesViewModel != null)
      {
        var vm = connectorPropertiesViewModel;
        var namePropertyValue = new PropertyStringValueViewModel(() => {return vm.Name;}, o => {vm.Name = (string)o;} );
        var nameProperty = new PropertySingleItem("Name", namePropertyValue);
        propertySingleItems.Add(nameProperty);

        var isSetPropertyWalue = new PropertyBoolValueViewModel(() => {return vm.IsSet;}, o => {vm.IsSet = (bool)o;} );
        var isSetProperty = new PropertySingleItem("IsSet", isSetPropertyWalue);
        propertySingleItems.Add(isSetProperty);

        var pipeVm = vm.DomainProperties as PipeConnectorDomainPropertiesViewModel;
        if (pipeVm != null)
        {
          var pressurePropertyWalue = new PropertyDoubleValueViewModel(
            () => pipeVm.Pressure, o => {pipeVm.Pressure = (double)o;} );
          var pressureProperty = new PropertySingleItem("Pressure", pressurePropertyWalue);

          var temperaturePropertyWalue = new PropertyDoubleValueViewModel(
            () => pipeVm.Temperature, o => {pipeVm.Temperature = (double)o;} );
          var temperatureProperty = new PropertySingleItem("Temperature", temperaturePropertyWalue);

          propertySingleItems.Add(pressureProperty);
          propertySingleItems.Add(temperatureProperty);
        }

        return propertySingleItems;
      }
      var elementPropertiesViewModel = propertiesViewModel as ElementPropertiesViewModel;
      if (elementPropertiesViewModel != null)
      {
        var vm = elementPropertiesViewModel;
        var namePropertyWalue = new PropertyStringValueViewModel(() => vm.Name, o => {vm.Name = (string)o;} );
        var nameProperty = new PropertySingleItem("Name", namePropertyWalue);

        var visualProperties = vm.ElementVisualPropertiesViewModel;
        var coords = visualProperties.Coords;

        var xPropertyWalue = new PropertyDoubleValueViewModel(() => coords.X, o => {coords.X = (double)o;} );
        var xProperty = new PropertySingleItem("X", xPropertyWalue);

        var yPropertyWalue = new PropertyDoubleValueViewModel(() => coords.Y, o => {coords.Y = (double)o;} );
        var yProperty = new PropertySingleItem("Y", yPropertyWalue); 

        propertySingleItems.Add(nameProperty);
        propertySingleItems.Add(xProperty);
        propertySingleItems.Add(yProperty);
        return propertySingleItems;
      }
      return propertySingleItems;
    }