2016-05-11 6 views
1

У меня есть набор данных, которые сгруппированы по иерархии. Мне нужна легенда диаграммы, чтобы отразить эту структуру (см скриншота)SciChart - показать иерархический список в осевой легенде

enter image description here

Выключение группы, естественно, должны выключить все его дочерние оси. Можно ли это сделать со встроенной осевой легендой? Если да, не могли бы вы дать некоторые указания относительно того, как? (потому что в настоящее время у меня нет ни малейшего представления) Если нет, то что было бы лучшим обходным решением? Отключить легенду, реализовать пользовательский элемент управления, а затем динамически изменить свойство привязки SeriesSource?

ответ

0

Управление SciChartLegend - это просто ItemsControl, который отображает данные путем привязки к ObservableCollection SeriesInfo через свойство LegendModifier.LegendData.

На английском языке это означает, что если вы можете понять, как отобразить иерархическую группу в ItemsControl, вы можете сделать то же самое в элементе управления SciChart Legend.

Возможно, вам понадобится создать собственный класс, наследующий элемент ItemsControl, для привязки к LegendModifier.LegendData и группировать элементы по вашему желанию. Или, используйте присоединенное поведение или конвертер для группировки элементов.

Далее вы можете использовать свой собственный класс или ItemsControl (вместо SciChartLegend), используя технику в LegendModifier Documentation.

В качестве альтернативы - Привязка LegendModifier.LegendData к SciChartLegend

Вы можете альтернативно связать LegendModifier.LegendData с SciChartLegend и разместить в любом месте вашего приложения. Вы также можете привязать LegendModifier.LegendData к ItemsControl.ItemsSource и создать шаблон по своему усмотрению.

<!-- Somewhere else in your application, you can declare n ItemsControl --> 
<!-- and bind to LegendModifier.LegendData --> 
<ItemsControl 
    Margin="23,23" 
    ScrollViewer.HorizontalScrollBarVisibility="Auto" 
    ScrollViewer.VerticalScrollBarVisibility="Auto" 
    <!-- Here you may need a converter or attached behaviour to group the SeriesInfo as you wish --> 
    ItemsSource="{Binding LegendData.SeriesInfo, ElementName=legendModifier, Mode=OneWay}"> 
    <ItemsControl.ItemTemplate> 
     <!-- Here you may need a Hierachical Data Template to display hierachical data --> 
     <DataTemplate x:Key="SciChartLegendItemTemplate" DataType="chartData:SeriesInfo"> 
      <StackPanel Orientation="Horizontal"> 
       <CheckBox Margin="5,0,0,0" 
          HorizontalAlignment="Left" 
          VerticalAlignment="Center" 
          IsChecked="{Binding RenderableSeries.IsVisible, Mode=TwoWay}" 
          Visibility="Visible" /> 

       <r:PointMarker Width="40" 
           Height="10" 
           Margin="5,0,0,0" 
           HorizontalAlignment="Center" 
           VerticalAlignment="Center" 
           HorizontalContentAlignment="Stretch" 
           VerticalContentAlignment="Stretch" 
           DataContext="{Binding RenderableSeries}" 
           DeferredContent="{Binding LegendMarkerTemplate}" 
           Visibility="{Binding ShowSeriesMarkers, RelativeSource={RelativeSource AncestorType=visuals:SciChartLegend}, Converter={StaticResource BooleanToVisibilityConverter}}" /> 

       <TextBlock Margin="5,0,5,0" 
          HorizontalAlignment="Left" 
          Text="{Binding SeriesName}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Хотя что-то вроде это не полное решение, он показывает вам, как использовать API SciChart Legend, чтобы подставлять элементы легенды ItemsControl и шаблоны , Из этого можно надеяться, что вы сможете группировать элементы и отображать данные иерархически.

+0

Привет, я старался следовать вашему совету, но, честно говоря, я не совсем понял это. Честно говоря, я даже не уверен, предложили ли вы 2 или 3 альтернативных решения. Я попытался создать пользовательский LegendModifier.LegendTemplate, который отобразит мою настраиваемую структуру. Я создал шаблон для группы, которая включает элемент ItemsControl для содержимого группы. У этого элемента ItemsControl будет другой настраиваемый шаблон. Результат не показал никакой легенды. К сожалению, с моим ограниченным знанием WPF, слишком много уконов для меня, чтобы иметь представление о том, где я ошибся. – Shaggydog

+0

Я хотел бы сосредоточиться на этой части вашего ответа: «Вам может понадобиться создать свой собственный класс, наследующий от ItemsControl, для привязки к LegendModifier.LegendData и группировать элементы по вашему желанию». Означает ли это, что я могу оставить модификатор легенды, как есть, и просто создать пользовательскую реализацию ItemsControl, которая будет обрабатывать группировку отдельно?Тогда мой вопрос: как заставить SciChart использовать этот настраиваемый элемент управления вместо легенды SciChart? – Shaggydog

+0

Да, это точно. SciChartLegend - это просто элемент ItemsControl, который был настроен на то, чтобы заставить его работать из коробки. Документация LegendModifier здесь http://www.scichart.com/documentation/v4.x/LegendModifier.html имеет раздел «Альтернативно - привязка LegendModifier.LegendData к SciChartLegend». LegendModifier.LegendData - это просто коллекция SeriesInfo. SeriesInfo подробно обсуждается на http://www.scichart.com/documentation/v4.x/SeriesInfo%20%E2%80%93%20the%20ViewModels%20for%20Tooltips%20and%20Legends.html. Я предлагаю открыть новый вопрос, если вы хотите больше деталей! –