public ClassBreakStyleItem(ClassBreakStyle style)
     : base(style)
 {
     classBreakStyle = style;
     if (classBreakStyle != null)
     {
         foreach (var classBreak in classBreakStyle.ClassBreaks)
         {
             StyleLayerListItem classBreakItem = new ClassBreakSubItem(classBreak, classBreakStyle.ColumnName);
             Children.Add(classBreakItem);
         }
     }
 }
        protected override void UpdateStyleItemCore()
        {
            base.UpdateStyleItemCore();
            if (classBreakStyle != null)
            {
                var deletedClassBreaks = Children.Where(i => !classBreakStyle.ClassBreaks.Any(c => c == i.ConcreteObject)).ToList();
                foreach (var deletedClassBreak in deletedClassBreaks)
                {
                    if (Children.Contains(deletedClassBreak))
                    {
                        Children.Remove(deletedClassBreak);
                    }
                }

                var addedClassBreaks = classBreakStyle.ClassBreaks.Where(c => !Children.Any(i => i.ConcreteObject == c)).ToList();
                foreach (var addedClassBreak in addedClassBreaks)
                {
                    StyleLayerListItem classBreakItem = new ClassBreakSubItem(addedClassBreak, classBreakStyle.ColumnName);
                    Children.Add(classBreakItem);
                }
            }
        }
        private IEnumerable <LegendImporterItemViewModel> GenerateStyleItems(Styles.Style style, int level)
        {
            if (style is AreaStyle || style is PointStyle || style is LineStyle)
            {
                LegendImporterItemViewModel styleLegendItem = new LegendImporterItemViewModel
                {
                    Text = style.Name,
                    CheckBoxVisibility = Visibility.Visible,
                    Level            = level,
                    LeftPaddingLevel = level,
                    Style            = style
                };

                using (Bitmap nativeImage = new Bitmap(iconSize, iconSize))
                {
                    var geoCanvas    = new PlatformGeoCanvas();
                    var drawingShape = new RectangleShape(-10, 10, 10, -10);
                    geoCanvas.BeginDrawing(nativeImage, drawingShape, GeographyUnit.Meter);
                    style.DrawSample(geoCanvas, new DrawingRectangleF(geoCanvas.Width * .5f, geoCanvas.Height * .5f, geoCanvas.Width, geoCanvas.Height));
                    geoCanvas.EndDrawing();

                    var streamSource = new MemoryStream();
                    nativeImage.Save(streamSource, ImageFormat.Png);

                    var imageSource = new BitmapImage();
                    imageSource.BeginInit();
                    imageSource.StreamSource = streamSource;
                    imageSource.EndInit();
                    imageSource.Freeze();

                    styleLegendItem.IconSource = imageSource;
                }

                yield return(styleLegendItem);
            }
            else if (style is ClassBreakStyle || style is RegexStyle || style is ValueStyle || style is FilterStyle)
            {
                var clonedStyle     = style.CloneDeep();
                var classBreakStyle = clonedStyle as ClassBreakStyle;
                var regexStyle      = clonedStyle as RegexStyle;
                var valueStyle      = clonedStyle as ValueStyle;
                var filterStyle     = clonedStyle as FilterStyle;
                IEnumerable <Styles.Style> subStyles = new Collection <Styles.Style>();
                if (classBreakStyle != null)
                {
                    subStyles = classBreakStyle.ClassBreaks.SelectMany(classBreakItem =>
                    {
                        foreach (var item in classBreakItem.CustomStyles)
                        {
                            item.Name = ClassBreakSubItem.GetClassBreakStyleName(classBreakItem.Value);
                        }
                        return(classBreakItem.CustomStyles);
                    });
                }
                else if (regexStyle != null)
                {
                    subStyles = regexStyle.RegexItems.SelectMany(regexItem => regexItem.CustomStyles);
                }
                else if (filterStyle != null)
                {
                    subStyles = new Collection <Styles.Style>();//filterStyle.Styles;
                }
                else
                {
                    subStyles = valueStyle.ValueItems.SelectMany(valueItem =>
                    {
                        foreach (var item in valueItem.CustomStyles)
                        {
                            item.Name = valueItem.Value;
                        }
                        return(valueItem.CustomStyles);
                    });
                }

                LegendImporterItemViewModel styleLegendItem = new LegendImporterItemViewModel
                {
                    Text = style.Name,
                    CheckBoxVisibility = Visibility.Visible,
                    Level = level,
                    Style = style
                };
                styleLegendItem.PropertyChanged += LayerLegendImporterItemPropertyChanged;

                using (Bitmap nativeImage = new Bitmap(iconSize, iconSize))
                {
                    var geoCanvas    = new PlatformGeoCanvas();
                    var drawingShape = new RectangleShape(-10, 10, 10, -10);
                    geoCanvas.BeginDrawing(nativeImage, drawingShape, GeographyUnit.Meter);
                    style.DrawSample(geoCanvas, new DrawingRectangleF(geoCanvas.Width * .5f, geoCanvas.Height * .5f, geoCanvas.Width, geoCanvas.Height));
                    geoCanvas.EndDrawing();

                    var streamSource = new MemoryStream();
                    nativeImage.Save(streamSource, ImageFormat.Png);
                    BitmapImage imageSource = new BitmapImage();
                    imageSource.BeginInit();
                    imageSource.StreamSource = streamSource;
                    imageSource.EndInit();
                    imageSource.Freeze();

                    styleLegendItem.IconSource = imageSource;
                }

                yield return(styleLegendItem);

                foreach (var itemStyle in subStyles)
                {
                    foreach (var tmpItem in GenerateStyleItems(itemStyle, level + 3))
                    {
                        yield return(tmpItem);
                    }
                }
            }
            else
            {
                var componentStyle = style as CompositeStyle;
                if (componentStyle != null)
                {
                    if (componentStyle.Styles.Count > 1)
                    {
                        LegendImporterItemViewModel styleLegendItem = new LegendImporterItemViewModel
                        {
                            Text = style.Name,
                            CheckBoxVisibility = Visibility.Visible,
                            Level      = level,
                            IconSource = new BitmapImage()
                        };

                        yield return(styleLegendItem);

                        foreach (var innerStyle in componentStyle.Styles.Reverse())
                        {
                            foreach (var tmpItem in GenerateStyleItems(innerStyle, level + 3))
                            {
                                yield return(tmpItem);
                            }
                        }
                    }
                    else
                    {
                        foreach (var tmpItem in GenerateStyleItems(componentStyle.Styles.FirstOrDefault(), level))
                        {
                            yield return(tmpItem);
                        }
                    }
                }
                else
                {
                    LegendImporterItemViewModel styleLegendItem = new LegendImporterItemViewModel
                    {
                        Text = style.Name,
                        CheckBoxVisibility = Visibility.Collapsed,
                        Level      = level,
                        IconSource = new BitmapImage()
                    };

                    yield return(styleLegendItem);
                }
            }
        }