GraphicsLayer selectionGraphicslayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; selectionGraphicslayer.ClearGraphics();
<Grid Style="{StaticResource WrapperStyle}">
<chartingToolkit:Chart Title="AnimationSequence = FirstToLast" Palette="{StaticResource GrowPieDataPointPalette}" Style="{StaticResource ChartStyle}" MouseLeftButtonDown="OnMouseLeftButtonDown" Margin="1,4,-1,-4">
<chartingToolkit:Chart.Series>
<chartingToolkit:PieSeries ItemsSource="{Binding ElementName=Map, Path=Layers[MySelectionGraphicsLayer].Graphics}" DependentValueBinding="{Binding Attributes[DISPDESC]}" AnimationSequence="FirstToLast"/>
</chartingToolkit:Chart.Series>
</chartingToolkit:Chart>
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="15" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock x:Name="DataDisplayTitle" Text="Search Results" FontSize="9" Grid.Row="0" FontWeight="Bold" FontFamily="Arial" Foreground="#FFFFFFFF" />
<esriWidgets:FeatureDataGrid Grid.Row="1" x:Name="QueryDetailsDataGrid" Height="170"
Map="{Binding ElementName=Map}"
GraphicsLayer="{Binding Layers[MySelectionGraphicsLayer], ElementName=Map}" />
</Grid>
Your binding looks fine to me. But have you looked at this sample? http://www.silverlight.net/content/s...n/default.html I'm not sure which Silverlight toolkit you are using but it seems you have to specify both IndependentValueBinding and DependentValueBinding properties.
<Grid Style="{StaticResource WrapperStyle}">
<chartingToolkit:Chart Title="AnimationSequence = FirstToLast" Palette="{StaticResource GrowPieDataPointPalette}" Style="{StaticResource ChartStyle}" MouseLeftButtonDown="OnMouseLeftButtonDown">
<chartingToolkit:Chart.Series>
<chartingToolkit:PieSeries ItemsSource="{Binding LevelsInRainfall, Source={StaticResource ParticulateLevel}}" DependentValueBinding="{Binding Particulate}" AnimationSequence="FirstToLast"/>
</chartingToolkit:Chart.Series>
</chartingToolkit:Chart>
</Grid>
# region Pie Chart
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Attached to event handler in XAML.")]
private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Chart chart = sender as Chart;
if (null != chart)
{
// Toggle each Series ItemsSource so the reveal/hide animations can be seen
foreach (DataPointSeries series in chart.Series)
{
if (null == series.Tag)
{
series.Tag = series.ItemsSource;
series.ItemsSource = null;
}
else
{
series.ItemsSource = series.Tag as IEnumerable;
series.Tag = null;
}
}
}
}
#endregion
<Grid Style="{StaticResource WrapperStyle}">
<chartingToolkit:Chart Title="AnimationSequence = FirstToLast" Palette="{StaticResource GrowPieDataPointPalette}" Style="{StaticResource ChartStyle}" MouseLeftButtonDown="OnMouseLeftButtonDown" Margin="1,4,-1,-4">
<chartingToolkit:Chart.Series>
<chartingToolkit:PieSeries ItemsSource="{Binding ElementName=Map, Path=Layers[MySelectionGraphicsLayer].Graphics}" DependentValueBinding="{Binding Attributes[DISPDESC]}" AnimationSequence="FirstToLast"/>
</chartingToolkit:Chart.Series>
</chartingToolkit:Chart>
</Grid>
<Style x:Key="ChartStyle" TargetType="chartingToolkit:Chart">
<Setter Property="Background" Value="Transparent"/>
</Style>
<ControlTemplate x:Key="GrowPieDataPoint" TargetType="chartingToolkit:PieDataPoint">
<Path Data="{TemplateBinding Geometry}" Fill="{TemplateBinding Background}" Stroke="{TemplateBinding BorderBrush}" RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<ScaleTransform x:Name="Scale" ScaleX="0" ScaleY="0"/>
</Path.RenderTransform>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="RevealStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Shown">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Scale" Storyboard.TargetProperty="ScaleX" To="1" Duration="0"/>
<DoubleAnimation Storyboard.TargetName="Scale" Storyboard.TargetProperty="ScaleY" To="1" Duration="0"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Hidden">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Scale" Storyboard.TargetProperty="ScaleX" To="0" Duration="0"/>
<DoubleAnimation Storyboard.TargetName="Scale" Storyboard.TargetProperty="ScaleY" To="0" Duration="0"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ToolTipService.ToolTip>
<ContentControl Content="{TemplateBinding DependentValue}"/>
</ToolTipService.ToolTip>
</Path>
</ControlTemplate>
<visualizationToolkit:ResourceDictionaryCollection x:Key="GrowPieDataPointPalette">
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="chartingToolkit:PieDataPoint">
<Setter Property="Template" Value="{StaticResource GrowPieDataPoint}"/>
<Setter Property="Background" Value="Gray"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="chartingToolkit:PieDataPoint">
<Setter Property="Template" Value="{StaticResource GrowPieDataPoint}"/>
<Setter Property="Background" Value="DarkBlue"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="chartingToolkit:PieDataPoint">
<Setter Property="Template" Value="{StaticResource GrowPieDataPoint}"/>
<Setter Property="Background" Value="DarkRed"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="chartingToolkit:PieDataPoint">
<Setter Property="Template" Value="{StaticResource GrowPieDataPoint}"/>
<Setter Property="Background" Value="Yellow"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="chartingToolkit:PieDataPoint">
<Setter Property="Template" Value="{StaticResource GrowPieDataPoint}"/>
<Setter Property="Background" Value="Blue"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="chartingToolkit:PieDataPoint">
<Setter Property="Template" Value="{StaticResource GrowPieDataPoint}"/>
<Setter Property="Background" Value="Red"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="chartingToolkit:PieDataPoint">
<Setter Property="Template" Value="{StaticResource GrowPieDataPoint}"/>
<Setter Property="Background" Value="Green"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="chartingToolkit:PieDataPoint">
<Setter Property="Template" Value="{StaticResource GrowPieDataPoint}"/>
<Setter Property="Background" Value="Pink"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="chartingToolkit:PieDataPoint">
<Setter Property="Template" Value="{StaticResource GrowPieDataPoint}"/>
<Setter Property="Background" Value="Cyan"/>
</Style>
</ResourceDictionary>
</visualizationToolkit:ResourceDictionaryCollection>
Likely the PieChart doesn't like the value of your attribute DISPDESC.
This attribute has to be numeric. Is it the case?
So do all the charts require the attributes to be numeric?
I looked into convertors but I'm not sure I can convert a field to numeric that has values like KTP, TS, ILPARK, 488R, W911, etc.
<Grid Style="{StaticResource WrapperStyle}" >
<Border BorderBrush="Black" BorderThickness="1">
<controlsToolkit:DockPanel>
<visualizationToolkit:Title Content="Drill-Down" FontWeight="Bold" FontSize="14" HorizontalAlignment="Center" controlsToolkit:DockPanel.Dock="Top"/>
<controlsToolkit:DockPanel LastChildFill="False" controlsToolkit:DockPanel.Dock="Right">
<StackPanel x:Name="InformationPanel" controlsToolkit:DockPanel.Dock="Top" Margin="5">
<TextBlock Text="Selected Call Type Details" FontWeight="Bold"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="TYPE CODE: "/>
<TextBlock Text="{Binding Attributes[TYPECODE]}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="COUNT: "/>
<TextBlock Text="{Binding Attributes.Count}"/>
</StackPanel>
</StackPanel>
<Button Content="Unselect" Click="Unselect_Click" Margin="5" controlsToolkit:DockPanel.Dock="Bottom"/>
</controlsToolkit:DockPanel>
<chartingToolkit:Chart x:Name="DrillDownChart" BorderBrush="Gray" Margin="5">
<chartingToolkit:Chart.Series>
<chartingToolkit:PieSeries ItemsSource="{Binding ElementName=Map, Path=Layers[MySelectionGraphicsLayer].Graphics}" IndependentValueBinding="{Binding Attributes[TYPECODE]}" DependentValueBinding="{Binding Attributes.Count}" IsSelectionEnabled="True" SelectionChanged="DrillDown_SelectionChanged"/>
</chartingToolkit:Chart.Series>
</chartingToolkit:Chart>
</controlsToolkit:DockPanel>
</Border>
</Grid>
ItemsSource="{Binding ElementName=Map, Path=Layers[MySelectionGraphicsLayer].Graphics}" public class AttributeGroup { public string Key { get; set; } public int Sum { get; set; } public int Count { get; set; } public IEnumerable<Graphic> Graphics {get; set;} // only useful for graphics selection from sliver selection }2) You need to create an enumeration of AttributeGroup from the graphics in your layer:
DataContext = graphicsLayer.Graphics.GroupBy(graphic => (string)graphic.Attributes["SUB_REGION"], (subregion, graphics) => new AttributeGroup { Key = subregion, Count = graphics.Count(), Sum = graphics.Select(g => (int)g.Attributes["POP2000"]).Sum(), Graphics = graphics }).ToArray();
<Grid Width="400" Height="300" HorizontalAlignment="Left" VerticalAlignment="Top"> <chartingToolkit:Chart Title="Population by Region" > <chartingToolkit:PieSeries IsSelectionEnabled="True" SelectionChanged="PieSeries_SelectionChanged" ItemsSource="{Binding}" IndependentValuePath="Key" DependentValuePath="Sum" AnimationSequence="FirstToLast"/> </chartingToolkit:Chart> </Grid>
private void PieSeries_SelectionChanged(object sender, SelectionChangedEventArgs e) { var dataPointSeries = sender as DataPointSeries; var attributeGroup = dataPointSeries.SelectedItem as AttributeGroup; if (attributeGroup == null) return; GraphicsLayer selectionGraphicslayer = MyMap.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; foreach (Graphic item in selectionGraphicslayer.Graphics) item.Selected = false; QueryDetailsDataGrid.SelectedItem = null; foreach (var graphic in attributeGroup.Graphics) { QueryDetailsDataGrid.SelectedItems.Add(graphic); graphic.Select(); } }And that's it (see attached result)
<esriWidgets:FeatureDataGrid Grid.Row="1" x:Name="QueryDetailsDataGrid" Height="170"
Map="{Binding ElementName=Map}"
GraphicsLayer="{Binding Layers[MySelectionGraphicsLayer], ElementName=Map}" Style="{StaticResource FeatureDataGridStyle1}" />
private void MyDrawSurface_DrawComplete(object sender, ESRI.ArcGIS.Client.DrawEventArgs args)
{
GraphicsLayer selectionGraphicslayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer;
selectionGraphicslayer.ClearGraphics();
QueryTask queryTask = new QueryTask((Layers.SelectedItem as FeatureLayer).Url);
queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;
queryTask.Failed += QueryTask_Failed;
Query query = new ESRI.ArcGIS.Client.Tasks.Query();
query.OutFields.Add("*");
query.Geometry = args.Geometry;
// Return geometry with result features
query.ReturnGeometry = true;
queryTask.ExecuteAsync(query);
}
private void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args)
{
FeatureSet featureSet = args.FeatureSet;
if (featureSet == null || featureSet.Features.Count < 1)
{
MessageBox.Show("No features retured from query");
return;
}
GraphicsLayer graphicsLayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer;
if (featureSet != null && featureSet.Features.Count > 0)
// ResultsDisplay.Visibility = Visibility.Visible;
{
foreach (Graphic feature in featureSet.Features)
{
switch (featureSet.GeometryType.ToString())
{
case "Polygon":
feature.Symbol = LayoutRoot.Resources["ResultsFillSymbol"] as FillSymbol;
break;
case "Polyline":
feature.Symbol = LayoutRoot.Resources["CustomGrowLineSymbol"] as LineSymbol;
break;
case "Point":
feature.Symbol = LayoutRoot.Resources["ResultsMarkerSymbol"] as SimpleMarkerSymbol;
break;
}
graphicsLayer.Graphics.Insert(0, feature);
}
//ResultsDisplay.Visibility = Visibility.Visible;
ResultsDisplay.IsExpanded = true;
}
MyDrawSurface.IsEnabled = false;
// PIE CHART - create an enumeration of AttributeGroup from the graphics in your layer
DataContext = graphicsLayer.Graphics.GroupBy(graphic => (string)graphic.Attributes["TYPECODE"],
(typecode, graphics) => new AttributeGroup
{
Key = typecode,
Count = graphics.Count(),
Sum = graphics.Select(g => (int)g.Attributes["DOW"]).Count(),
//Sum = graphics.Select(g => (int)g.Attributes["DOW"]).Sum),
Graphics = graphics
}).ToArray();
//END PIE CHART