public BrushPropertyViewModel(TargetPlatform platform, IPropertyInfo property, IEnumerable <IObjectEditor> editors)
            : base(platform, property, editors)
        {
            if (property.Type.IsAssignableFrom(typeof(CommonSolidBrush)))
            {
                Solid = new SolidBrushViewModel(this,
                                                property is IColorSpaced colorSpacedPropertyInfo ? colorSpacedPropertyInfo.ColorSpaces :  null);
                if (platform.SupportsMaterialDesign)
                {
                    MaterialDesign = new MaterialDesignColorViewModel(this);
                }
            }

            // TODO: we actually need to localize this for platforms really, "brush" doesn't make sense for some
            var types = new OrderedDictionary <string, CommonBrushType> {
                { Resources.NoBrush, CommonBrushType.NoBrush },
                { Resources.SolidBrush, CommonBrushType.Solid },
                { Resources.ResourceBrush, CommonBrushType.Resource }
            };

            if (platform.SupportsMaterialDesign)
            {
                types.Insert(2, Resources.MaterialDesignColorBrush, CommonBrushType.MaterialDesign);
            }

            BrushTypes = types;
            RequestCurrentValueUpdate();
        }
        public BrushPropertyViewModel(TargetPlatform platform, IPropertyInfo property, IEnumerable <IObjectEditor> editors, PropertyVariation variation = null, IEnumerable <CommonBrushType> allowedBrushTypes = null)
            : base(platform, property, editors, variation)
        {
            if (property.Type.IsAssignableFrom(typeof(CommonSolidBrush)) ||
                property.Type.IsAssignableFrom(typeof(CommonColor)))
            {
                Solid = new SolidBrushViewModel(this,
                                                property is IColorSpaced colorSpacedPropertyInfo ? colorSpacedPropertyInfo.ColorSpaces :  null);
                if (platform.SupportsMaterialDesign)
                {
                    MaterialDesign = new MaterialDesignColorViewModel(this);
                }
            }

            allowedBrushTypes = allowedBrushTypes ?? new[] {
                CommonBrushType.NoBrush, CommonBrushType.Solid, CommonBrushType.MaterialDesign,
                CommonBrushType.Gradient, CommonBrushType.Tile, CommonBrushType.Resource
            };

            // TODO: we actually need to localize this for platforms really, "brush" doesn't make sense for some
            var types = new OrderedDictionary <string, CommonBrushType> ();

            if (allowedBrushTypes.Contains(CommonBrushType.NoBrush))
            {
                types.Add(Resources.NoBrush, CommonBrushType.NoBrush);
            }
            if (allowedBrushTypes.Contains(CommonBrushType.Solid))
            {
                types.Add(Resources.SolidBrush, CommonBrushType.Solid);
            }
            if (allowedBrushTypes.Contains(CommonBrushType.Resource) && property.ValueSources.HasFlag(ValueSources.Resource))
            {
                types.Add(Resources.ResourceBrush, CommonBrushType.Resource);
            }

            if (platform.SupportsMaterialDesign && allowedBrushTypes.Contains(CommonBrushType.MaterialDesign))
            {
                types.Insert(2, Resources.MaterialDesignColorBrush, CommonBrushType.MaterialDesign);
            }

            BrushTypes = types;
            RequestCurrentValueUpdate();
        }