/// /// 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)); } } }