///
/// Extended OxyPlot ColumnItem class. Adds a label, which is used by elements such
/// as a category axis.
///
public class Item : ColumnItem, INotifyPropertyChanged
{
///
/// Label field. May be used for category axis.
///
private string _label;
///
/// Label property. May be used for category axis.
///
public string Label
{
get { return _label; }
set
{
if (_label != value)
{
_label = value;
NotifyPropertyChanged();
}
}
}
///
/// PropertyChanged event handler.
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// PropertyChanged event handling method.
///
/// Property name. If not passed, name of the property,
/// which called this method, is used.
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
///
/// Extended OxyPlot ColumnSeries class. Allows selection of columns and tracks which
/// column has been selected.
///
public class SelectableColumnSeries : ColumnSeries, INotifyPropertyChanged
{
///
/// Selected ColumnItem field.
///
private ColumnItem _selectedColumn;
///
/// Selected ColumnItem property.
///
public ColumnItem SelectedColumn
{
get { return _selectedColumn; }
set
{
if (_selectedColumn != value)
{
_selectedColumn = value;
NotifyPropertyChanged();
}
}
}
///
/// Selected ColumnItem color field.
///
private OxyColor _selectedColumnColor;
///
/// Selected ColumnItem color property.
///
public OxyColor SelectedColumnColor
{
get { return _selectedColumnColor; }
set
{
_selectedColumnColor = value;
NotifyPropertyChanged();
}
}
///
/// SelectableColumnSeries constructor.
///
public SelectableColumnSeries()
{
MouseDown += SelectableColumnSeries_MouseDown;
}
///
/// MouseDown event handler for the SelectableColumnSeries. Handles changing of the selected
/// ColumnItem, as well as its color, if a SelectedColumnColor was provided. If the color for
/// selection was not provided, then no visual feedback is provided, but the selection is still
/// made.
///
/// Event sender (object).
/// Event arguments (OxyMouseDownEventArgs).
protected void SelectableColumnSeries_MouseDown(object sender, OxyMouseDownEventArgs e)
{
var nearest = GetNearestPoint(e.Position, false);
var column = nearest.Item as ColumnItem;
if (column == null)
{
return;
}
if (SelectedColumn != null)
{
SelectedColumn.Color = FillColor;
}
if (!SelectedColumnColor.IsUndefined())
{
column.Color = SelectedColumnColor;
}
SelectedColumn = column;
PlotModel.InvalidatePlot(true);
}
///
/// PropertyChanged event handler.
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// PropertyChanged event handling method.
///
/// Property name. If not passed, name of the property,
/// which called this method, is used.
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}