コード例 #1
0
        /// <summary>
        ///   Update IsEnabled on properties marked [Optional(..)]
        /// </summary>
        /// <param name = "propertyViewModel">
        /// </param>
        private void UpdateOptionalProperties(PropertyViewModel propertyViewModel)
        {
            foreach (PropertyViewModel prop in propertyMap.Values)
            {
                var oprop = prop as OptionalPropertyViewModel;
                if (oprop == null)
                {
                    continue;
                }

                if (oprop.OptionalPropertyName == propertyViewModel.PropertyName)
                {
                    if (propertyViewModel.Value is bool)
                    {
                        oprop.IsEnabled = (bool)propertyViewModel.Value;
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        ///   Updates the property header and tooltip
        /// </summary>
        /// <param name = "instanceType">
        ///   Type of the object being edited
        /// </param>
        /// <param name = "propertyViewModel">
        ///   The property viewmodel
        /// </param>
        private void LocalizePropertyHeader(Type instanceType, PropertyViewModel propertyViewModel)
        {
            propertyViewModel.Header  = GetLocalizedString(instanceType, propertyViewModel.Name);
            propertyViewModel.ToolTip = GetLocalizedTooltip(instanceType, propertyViewModel.Name);

            // [DisplayName(..)] and [Description(...)] attributes overrides the localized strings
            var dna = AttributeHelper.GetFirstAttribute <DisplayNameAttribute>(propertyViewModel.Descriptor);
            var da  = AttributeHelper.GetFirstAttribute <DescriptionAttribute>(propertyViewModel.Descriptor);

            if (dna != null)
            {
                propertyViewModel.Header = dna.DisplayName;
            }

            if (da != null)
            {
                propertyViewModel.ToolTip = da.Description;
            }
        }
コード例 #3
0
        public virtual PropertyViewModel CreateViewModel(object instance, PropertyDescriptor descriptor)
        {
            PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(instance);

            PropertyViewModel propertyViewModel = null;

            string optionalPropertyName;

            if (IsOptional(descriptor, out optionalPropertyName))
            {
                propertyViewModel = new OptionalPropertyViewModel(instance, descriptor, optionalPropertyName, owner);
            }

            if (IsPassword(descriptor))
            {
                propertyViewModel = new PasswordPropertyViewModel(instance, descriptor, owner);
            }

            if (IsResettable(descriptor))
            {
                propertyViewModel = new ResettablePropertyViewModel(instance, descriptor, owner);
            }

            if (UsePropertyPattern != null)
            {
                string             usePropertyName = String.Format(UsePropertyPattern, descriptor.Name);
                PropertyDescriptor useDescriptor   = pdc.Find(usePropertyName, false);
                if (useDescriptor != null)
                {
                    propertyViewModel = new OptionalPropertyViewModel(instance, descriptor, useDescriptor, owner);
                }
            }

            bool showHeader;

            if (IsWide(descriptor, out showHeader))
            {
                propertyViewModel = new WidePropertyViewModel(instance, descriptor, showHeader, owner);
            }

            // If bool properties should be shown as checkbox only (no header label), we create a CheckBoxPropertyViewModel
            if (descriptor.PropertyType == typeof(bool) && owner != null && !owner.ShowBoolHeader)
            {
                propertyViewModel = new CheckBoxPropertyViewModel(instance, descriptor, owner);
            }

            double        min, max, largeChange, smallChange;
            double        tickFrequency;
            bool          snapToTicks;
            TickPlacement tickPlacement;

            if (IsSlidable(descriptor, out min, out max, out largeChange, out smallChange, out tickFrequency,
                           out snapToTicks, out tickPlacement))
            {
                propertyViewModel = new SlidablePropertyViewModel(instance, descriptor, owner)
                {
                    SliderMinimum       = min,
                    SliderMaximum       = max,
                    SliderLargeChange   = largeChange,
                    SliderSmallChange   = smallChange,
                    SliderSnapToTicks   = snapToTicks,
                    SliderTickFrequency = tickFrequency,
                    SliderTickPlacement = tickPlacement
                }
            }
            ;

            // FilePath
            string filter, defaultExtension;
            bool   useOpenDialog;

            if (IsFilePath(descriptor, out filter, out defaultExtension, out useOpenDialog))
            {
                propertyViewModel = new FilePathPropertyViewModel(instance, descriptor, owner)
                {
                    Filter = filter, DefaultExtension = defaultExtension, UseOpenDialog = useOpenDialog
                }
            }
            ;

            // DirectoryPath
            if (IsDirectoryPath(descriptor))
            {
                propertyViewModel = new DirectoryPathPropertyViewModel(instance, descriptor, owner);
            }

            // Default property (using textbox)
            if (propertyViewModel == null)
            {
                var tp = new PropertyViewModel(instance, descriptor, owner);
                propertyViewModel = tp;
            }

            // Check if the AutoUpdatingText attribute is set (this will select the template that has a text binding using UpdateSourceTrigger=PropertyChanged)
            if (IsAutoUpdatingText(descriptor))
            {
                propertyViewModel.AutoUpdateText = true;
            }

            propertyViewModel.FormatString = GetFormatString(descriptor);

            //var ha = AttributeHelper.GetFirstAttribute<HeightAttribute>(descriptor);
            //if (ha != null)
            //    propertyViewModel.Height = ha.Height;
            propertyViewModel.Height    = GetHeight(descriptor);
            propertyViewModel.MaxLength = GetMaxLength(descriptor);

            if (propertyViewModel.Height > 0 || IsMultilineText(descriptor))
            {
                propertyViewModel.AcceptsReturn = true;
                propertyViewModel.TextWrapping  = TextWrapping.Wrap;
            }

            var soa = AttributeHelper.GetFirstAttribute <SortOrderAttribute>(descriptor);

            if (soa != null)
            {
                propertyViewModel.SortOrder = soa.SortOrder;
            }

            if (IsEnabledPattern != null)
            {
                string isEnabledName = String.Format(IsEnabledPattern, descriptor.Name);
                propertyViewModel.IsEnabledDescriptor = pdc.Find(isEnabledName, false);
            }

            if (IsVisiblePattern != null)
            {
                string isVisibleName = String.Format(IsVisiblePattern, descriptor.Name);
                propertyViewModel.IsVisibleDescriptor = pdc.Find(isVisibleName, false);
            }

            return(propertyViewModel);
        }
コード例 #4
0
        public virtual PropertyViewModel CreateViewModel(object instance, PropertyDescriptor descriptor)
        {
            PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(instance);

            PropertyViewModel propertyViewModel = null;

            string optionalPropertyName;
            if (IsOptional(descriptor, out optionalPropertyName))
                propertyViewModel = new OptionalPropertyViewModel(instance, descriptor, optionalPropertyName, owner);

            if (IsPassword(descriptor))
                propertyViewModel = new PasswordPropertyViewModel(instance, descriptor, owner);

            if (IsResettable(descriptor))
                propertyViewModel = new ResettablePropertyViewModel(instance, descriptor, owner);

            if (UsePropertyPattern != null)
            {
                string usePropertyName = String.Format(UsePropertyPattern, descriptor.Name);
                PropertyDescriptor useDescriptor = pdc.Find(usePropertyName, false);
                if (useDescriptor != null)
                    propertyViewModel = new OptionalPropertyViewModel(instance, descriptor, useDescriptor, owner);
            }

            bool showHeader;
            if (IsWide(descriptor, out showHeader))
                propertyViewModel = new WidePropertyViewModel(instance, descriptor, showHeader, owner);

            // If bool properties should be shown as checkbox only (no header label), we create a CheckBoxPropertyViewModel
            if (descriptor.PropertyType == typeof(bool) && owner != null && !owner.ShowBoolHeader)
                propertyViewModel = new CheckBoxPropertyViewModel(instance, descriptor, owner);

            double min, max, largeChange, smallChange;
            double tickFrequency;
            bool snapToTicks;
            TickPlacement tickPlacement;
            if (IsSlidable(descriptor, out min, out max, out largeChange, out smallChange, out tickFrequency,
                           out snapToTicks, out tickPlacement))
                propertyViewModel = new SlidablePropertyViewModel(instance, descriptor, owner)
                                        {
                                            SliderMinimum = min,
                                            SliderMaximum = max,
                                            SliderLargeChange = largeChange,
                                            SliderSmallChange = smallChange,
                                            SliderSnapToTicks = snapToTicks,
                                            SliderTickFrequency = tickFrequency,
                                            SliderTickPlacement = tickPlacement
                                        };

            // FilePath
            string filter, defaultExtension;
            bool useOpenDialog;
            if (IsFilePath(descriptor, out filter, out defaultExtension, out useOpenDialog))
                propertyViewModel = new FilePathPropertyViewModel(instance, descriptor, owner) { Filter = filter, DefaultExtension = defaultExtension, UseOpenDialog = useOpenDialog };

            // DirectoryPath
            if (IsDirectoryPath(descriptor))
                propertyViewModel = new DirectoryPathPropertyViewModel(instance, descriptor, owner);

            // Default property (using textbox)
            if (propertyViewModel == null)
            {
                var tp = new PropertyViewModel(instance, descriptor, owner);
                propertyViewModel = tp;
            }

            // Check if the AutoUpdatingText attribute is set (this will select the template that has a text binding using UpdateSourceTrigger=PropertyChanged)
            if (IsAutoUpdatingText(descriptor))
                propertyViewModel.AutoUpdateText = true;

            propertyViewModel.FormatString = GetFormatString(descriptor);

            //var ha = AttributeHelper.GetFirstAttribute<HeightAttribute>(descriptor);
            //if (ha != null)
            //    propertyViewModel.Height = ha.Height;
            propertyViewModel.Height = GetHeight(descriptor);
            propertyViewModel.MaxLength = GetMaxLength(descriptor);

            if (propertyViewModel.Height > 0 || IsMultilineText(descriptor))
            {
                propertyViewModel.AcceptsReturn = true;
                propertyViewModel.TextWrapping = TextWrapping.Wrap;
            }

            var soa = AttributeHelper.GetFirstAttribute<SortOrderAttribute>(descriptor);
            if (soa != null)
                propertyViewModel.SortOrder = soa.SortOrder;

            if (IsEnabledPattern != null)
            {
                string isEnabledName = String.Format(IsEnabledPattern, descriptor.Name);
                propertyViewModel.IsEnabledDescriptor = pdc.Find(isEnabledName, false);
            }

            if (IsVisiblePattern != null)
            {
                string isVisibleName = String.Format(IsVisiblePattern, descriptor.Name);
                propertyViewModel.IsVisibleDescriptor = pdc.Find(isVisibleName, false);
            }

            return propertyViewModel;
        }
コード例 #5
0
        private DataTemplate FindDataTemplate(PropertyViewModel propertyViewModel, FrameworkElement element)
        {
            Type propertyType = propertyViewModel.PropertyType;

            if (Nullable.GetUnderlyingType(propertyType) != null)
            {
                propertyType = Nullable.GetUnderlyingType(propertyType);
            }

            // Try to find a template for the given type
            var template = TryToFindDataTemplate(element, propertyType);

            if (template != null)
            {
                return(template);
            }

            // DataTemplates for enum types
            if (propertyType.BaseType == typeof(Enum))
            {
                var rba     = propertyViewModel.Descriptor.Attributes[typeof(RadioButtonsAttribute)] as RadioButtonsAttribute;
                int nValues = Enum.GetValues(propertyType).FilterOnBrowsableAttribute().Count;
                if (rba != null)
                {
                    if (rba.UseRadioButtons)
                    {
                        nValues = Owner.EnumAsRadioButtonsLimit;
                    }
                    else
                    {
                        nValues = Owner.EnumAsRadioButtonsLimit + 1;
                    }
                }
                if (nValues > Owner.EnumAsRadioButtonsLimit)
                {
                    template = TryToFindDataTemplate(element, "ComboBoxEnumTemplate");
                }
                else
                {
                    template = TryToFindDataTemplate(element, "RadioButtonsEnumTemplate");
                }
                if (template != null)
                {
                    return(template);
                }
            }

            // Try to find a template for the base type
            while (propertyType.BaseType != null)
            {
                propertyType = propertyType.BaseType;
                template     = TryToFindDataTemplate(element, propertyType);
                if (template != null)
                {
                    return(template);
                }
            }

            // If the Slidable attribute is set, use the 'sliderBox' template
            if (propertyViewModel is SlidablePropertyViewModel)
            {
                template = TryToFindDataTemplate(element, "SliderBoxTemplate");
                if (template != null)
                {
                    return(template);
                }
            }

            if (propertyViewModel is FilePathPropertyViewModel)
            {
                template = TryToFindDataTemplate(element, "FilePathTemplate");
                if (template != null)
                {
                    return(template);
                }
            }

            if (propertyViewModel is DirectoryPathPropertyViewModel)
            {
                template = TryToFindDataTemplate(element, "DirectoryPathTemplate");
                if (template != null)
                {
                    return(template);
                }
            }

            if (propertyViewModel is PasswordPropertyViewModel)
            {
                template = TryToFindDataTemplate(element, "PasswordTemplate");
                if (template != null)
                {
                    return(template);
                }
            }

            // Use the default template (TextBox)
            if (propertyViewModel.AutoUpdateText)
            {
                template = TryToFindDataTemplate(element, "DefaultTemplateAutoUpdate");
            }
            else
            {
                template = TryToFindDataTemplate(element, "DefaultTemplate");
            }

            return(template);
        }
コード例 #6
0
ファイル: PropertyEditor.cs プロジェクト: basio/veropos
        /// <summary>
        ///   Update IsEnabled on properties marked [Optional(..)]
        /// </summary>
        /// <param name = "propertyViewModel">
        /// </param>
        private void UpdateOptionalProperties(PropertyViewModel propertyViewModel)
        {
            foreach (PropertyViewModel prop in propertyMap.Values)
            {
                var oprop = prop as OptionalPropertyViewModel;
                if (oprop == null)
                {
                    continue;
                }

                if (oprop.OptionalPropertyName == propertyViewModel.PropertyName)
                {
                    if (propertyViewModel.Value is bool)
                    {
                        oprop.IsEnabled = (bool)propertyViewModel.Value;
                    }
                }
            }
        }
コード例 #7
0
ファイル: PropertyEditor.cs プロジェクト: basio/veropos
        /// <summary>
        ///   Updates the property header and tooltip
        /// </summary>
        /// <param name = "instanceType">
        ///   Type of the object being edited
        /// </param>
        /// <param name = "propertyViewModel">
        ///   The property viewmodel
        /// </param>
        private void LocalizePropertyHeader(Type instanceType, PropertyViewModel propertyViewModel)
        {
            propertyViewModel.Header = GetLocalizedString(instanceType, propertyViewModel.Name);
            propertyViewModel.ToolTip = GetLocalizedTooltip(instanceType, propertyViewModel.Name);

            // [DisplayName(..)] and [Description(...)] attributes overrides the localized strings
            var dna = AttributeHelper.GetFirstAttribute<DisplayNameAttribute>(propertyViewModel.Descriptor);
            var da = AttributeHelper.GetFirstAttribute<DescriptionAttribute>(propertyViewModel.Descriptor);

            if (dna != null)
            {
                propertyViewModel.Header = dna.DisplayName;
            }

            if (da != null)
            {
                propertyViewModel.ToolTip = da.Description;
            }
        }
コード例 #8
0
        /// <summary>
        /// The find data template.
        /// </summary>
        /// <param name="propertyViewModel">
        /// The property view model.
        /// </param>
        /// <param name="element">
        /// The element.
        /// </param>
        /// <returns>
        /// </returns>
        private DataTemplate FindDataTemplate(PropertyViewModel propertyViewModel, FrameworkElement element)
        {
            Type propertyType = propertyViewModel.PropertyType;

            if (Nullable.GetUnderlyingType(propertyType) != null)
            {
                propertyType = Nullable.GetUnderlyingType(propertyType);
            }

            // Try to find a template for the given type
            var template = TryToFindDataTemplate(element, propertyType);
            if (template != null)
            {
                return template;
            }

            // DataTemplates for enum types
            if (propertyType.BaseType == typeof(Enum))
            {
                var rba =
                    propertyViewModel.Descriptor.Attributes[typeof(RadioButtonsAttribute)] as RadioButtonsAttribute;
                int nValues = Enum.GetValues(propertyType).FilterOnBrowsableAttribute().Count;
                if (rba != null)
                {
                    nValues = this.Owner.EnumAsRadioButtonsLimit;
                }

                if (nValues > this.Owner.EnumAsRadioButtonsLimit)
                {
                    template = TryToFindDataTemplate(element, "ComboBoxEnumTemplate");
                }
                else
                {
                    template = TryToFindDataTemplate(element, "RadioButtonsEnumTemplate");
                }

                if (template != null)
                {
                    return template;
                }
            }

            // Try to find a template for the base type
            while (propertyType.BaseType != null)
            {
                propertyType = propertyType.BaseType;
                template = TryToFindDataTemplate(element, propertyType);
                if (template != null)
                {
                    return template;
                }
            }

            // If the Slidable attribute is set, use the 'sliderBox' template
            if (propertyViewModel is SlidablePropertyViewModel)
            {
                template = TryToFindDataTemplate(element, "SliderBoxTemplate");
                if (template != null)
                {
                    return template;
                }
            }

            if (propertyViewModel is FilePathPropertyViewModel)
            {
                template = TryToFindDataTemplate(element, "FilePathTemplate");
                if (template != null)
                {
                    return template;
                }
            }

            if (propertyViewModel is DirectoryPathPropertyViewModel)
            {
                template = TryToFindDataTemplate(element, "DirectoryPathTemplate");
                if (template != null)
                {
                    return template;
                }
            }

            if (propertyViewModel is PasswordPropertyViewModel)
            {
                template = TryToFindDataTemplate(element, "PasswordTemplate");
                if (template != null)
                {
                    return template;
                }
            }

            // Use the default template (TextBox)
            if (propertyViewModel.AutoUpdateText)
            {
                template = TryToFindDataTemplate(element, "DefaultTemplateAutoUpdate");
            }
            else
            {
                template = TryToFindDataTemplate(element, "DefaultTemplate");
            }

            return template;
        }