When I select a series/plot, I would like to identify where it came with more than just the Name member. How can I do that?
Background:
I have a list of unsigned integer values taken from a data logger. I bundle the values up in a class with some other information, such as the name of the sample and an ID string.
Since I can’t data bind to the logged samples as-is, I convert them to a SciChart friendly “LineRenderableSeriesViewModel” and add them to a list of “ObservableCollection” that I data bind to a SciChart.
ViewModel.cs:
// Where "loggedSamples" is a SamplesContainer
//class SamplesContainer
//{
// public string Name;
// public string ID; **<=== I want to get this somehow when I select something**
// public Uint16 data {get;set;}
//}
// Convert Samples => XyDataSeries => LineRenderableSeriesViewModel
SamplesContainer loggedSamples = GetLoggedSample();
XyDataSeries<double, double> xySeries = ConvertSamplesToXyDataSeries(loggedSamples);
xySeries.SeriesName = loggedSamples.Name;
LineRenderableSeriesViewModel lineSeries = new LineRenderableSeriesViewModel() {
DataSeries = xySeries, StyleKey = "LineStyle", Stroke = Colors.Blue };
RenderableSeriesViewModelForChannels.Add(lineSeries);
MainWindow.xaml:
<s:SciChartSurface Name="sciChartItemView" Grid.Column="2"
AllowDrop="True"
DragDrop.Drop="sciChartItemView_Drop"
DragDrop.DragEnter="sciChartItemView_DragEnter"
MinHeight="80"
s:ThemeManager.Theme="BrightSpark"
RenderableSeries="{s:SeriesBinding RenderableSeriesViewModelForChannels}"
ViewportManager="{Binding SampleSetViewMod.ViewportManager}"
DebugWhyDoesntSciChartRender="True"
s:SciChartGroup.VerticalChartGroup="sharedYAxisWidth"
>
<s:SciChartSurface.XAxis>
<s:NumericAxis
DrawMajorGridLines="True"
DrawMinorGridLines="False"
DrawMajorBands="False"
VisibleRange="{Binding SampleSetViewMod.SharedXVisibleRange, Mode=TwoWay}"
Visibility="Hidden"
TextFormatting="0.######"/>
</s:SciChartSurface.XAxis>
<s:SciChartSurface.YAxis>
<s:NumericAxis AxisAlignment="Left"
DrawMajorGridLines="False"
DrawMinorGridLines="False"
DrawMajorBands="False"
Visibility="Visible">
<s:NumericAxis.GrowBy>
<s:DoubleRange Min="0.1" Max="0.1" />
</s:NumericAxis.GrowBy>
</s:NumericAxis>
</s:SciChartSurface.YAxis>
<s:SciChartSurface.ChartModifier>
<s:ModifierGroup>
<s:ZoomExtentsModifier XyDirection="YDirection"/>
<s:ZoomPanModifier ExecuteOn="MouseMiddleButton" XyDirection="XYDirection" ClipModeX="ClipAtExtents" />
<local:ExtendedMouseWheelZoomModifier />
<s:RubberBandXyZoomModifier IsEnabled="True"
IsXAxisOnly="False"
ReceiveHandledEvents="True" />
<s:LegendModifier ShowLegend="True" Orientation="Vertical" Margin="10"
GetLegendDataFor="AllSeries"
ShowVisibilityCheckboxes="False"
HorizontalAlignment="Right"
LegendPlacement="Inside"
Background="White"
/>
<local:ExtendedSeriesSelectionModifier SelectionChanged="SeriesSelectionModifier_OnSelectionChanged">
<local:ExtendedSeriesSelectionModifier.SelectedSeriesStyle>
<Style TargetType="s:FastLineRenderableSeriesForMvvm">
<Setter Property="StrokeDashArray" Value="10,5"/>
</Style>
</local:ExtendedSeriesSelectionModifier.SelectedSeriesStyle>
</local:ExtendedSeriesSelectionModifier>
<!--<s:CursorModifier x:Name="cursorModifier" IsEnabled="True" />
<s:RolloverModifier x:Name="rolloverModifier" IsEnabled="True"/>-->
</s:ModifierGroup>
</s:SciChartSurface.ChartModifier>
</s:SciChartSurface>
- Hi Chris, Thanks for your question. Could you please tell us more about what kind of additional information do you want to get? How do you expect to get it, inside the ExtendedSeriesSelectionModifier or some other place?
- Im pretty sure BaseRenderableSeriesViewModel.IsSelected fires a property changed notification when the user selects a series in MVVM. From that you can access BaseRenderableSeriesViewModel.DataSeries to get the data of the selected series.
- Thanks guys! I’ve been trying to figure this out off and on for months! Andrew’s mention of the BaseRenderableSeriesViewModel.DataSeries was key to finding the answer. The DataSeries (an XyDataSeries in my case) has a “Tag” member that does just what I want. I’m posting my solution below. I’m am sooo happy.
- You must login to post comments
Solution Found thanks to Andrew 🙂
Background: I take logged samples from a datalogger, store them in a “SamplesContainer” and turn the SamplesContainer
into a SciChart friendly XyDataSeries. I then create a LineRenderableSeriesViewModel object with that XyDataSeries
and some other information from the SamplesContainer.
Problem: When a user selects a series in the view with the mouse, I want to somehow get back the associated SamplesContainer ID.
Solution: XyDataSeries has a “Tag” member that can be assigned the SamplesContainer ID. Now when the user selects
a “LineRenderableSeriesViewModel” in the view, the Tag can be used to identify the SamplesContainer that it came from.
LineRenderableSeriesViewModel.DataSeries.Tag
// Where "loggedSamples" is a SamplesContainer
//class SamplesContainer
//{
// public string Name;
// public string ID; **<=== I want to get this somehow when I select something**
// public Uint16 [] data {get;set;}
//}
// Convert Samples => XyDataSeries => LineRenderableSeriesViewModel
SamplesContainer loggedSamples = GetLoggedSample();
XyDataSeries<double, double> xySeries = ConvertSamplesToXyDataSeries(loggedSamples);
xySeries.SeriesName = loggedSamples.Name;
// NEW NEW NEW NEW NEW NEW NEW NEW
xySeries.Tag = loggedSamples.ID;
LineRenderableSeriesViewModel lineSeries = new LineRenderableSeriesViewModel() {
DataSeries = xySeries, StyleKey = "LineStyle", Stroke = Colors.Blue };
RenderableSeriesViewModelForChannels.Add(lineSeries);
- Christopher Bennet answered 7 years ago
- last edited 7 years ago
- You must login to post comments
Edit:
Since I can’t data bind to the logged samples as-is, I convert them to a SciChart friendly “LineRenderableSeriesViewModel” and add them to a list of “ObservableCollection” that I data bind to a SciChart.
Should read:
Since I can’t data bind to the logged samples as-is, I convert them to a SciChart friendly “LineRenderableSeriesViewModel” and add them to a list of “ObservableCollection<IRenderableSeriesViewModel>”
that I data bind to a SciChart.
- Christopher Bennet answered 7 years ago
- You must login to post comments
Please login first to submit.