using System.Windows; using System.Windows.Controls; using ExtendedGrid.ExtendedGridControl; namespace ExtendedGrid.Classes { /// /// Class for displaying the row numbers in the row headers. /// public class DataGridBehavior { public static DependencyProperty DisplayRowNumberProperty = DependencyProperty.RegisterAttached("DisplayRowNumber", typeof(bool), typeof(DataGridBehavior), new FrameworkPropertyMetadata(false, OnRowNumbersChanged)); /// /// Gets the DisplayRowNumberProperty's value. /// /// The target to get the value from /// The value public static bool GetRowNumber(DependencyObject target) { return (bool)target.GetValue(DisplayRowNumberProperty); }//end GetDisplayRowNumber /// /// Sets the DisplayRowNumberProperty to value. /// /// The target to set the property of /// The value to set the property to public static void SetRowNumber(DependencyObject target, bool value) { target.SetValue(DisplayRowNumberProperty, value); }//end SetDisplayRowNumber /// /// Subscribes or unsubscribes the LoadingRow and UnloadingRow events to the RefreshRowNumbers method /// in order to properly update the row numbers when rows are added or deleted. /// /// /// private static void OnRowNumbersChanged(DependencyObject source, DependencyPropertyChangedEventArgs args) { DataGrid grid = source as DataGrid; if (grid == null) return; if ((bool)args.NewValue) { grid.LoadingRow += RefreshRowNumbers; grid.UnloadingRow += RefreshRowNumbers; } else { grid.LoadingRow -= RefreshRowNumbers; grid.UnloadingRow -= RefreshRowNumbers; } }//end OnRowNumbersChanged /// /// Event handler that handles refreshing the row numbers in the row headers. /// /// /// private static void RefreshRowNumbers(object sender, DataGridRowEventArgs args) { var grid = sender as ExtendedDataGrid; if (grid == null) return; if (grid.IsGroupByOn) return; foreach (var item in grid.Items) { var row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(item); if (row != null && row.GetIndex()!=-1) row.Header = (row.GetIndex() + 1).ToString(); } }//end RefreshRowNumbers }//end class DataGridBehavior }//end namespace