andrew4582

WPF DataGridSelectedRows Extension

Nov 21st, 2014
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.64 KB | None | 0 0
  1. using System.Linq;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.Windows.Input;
  5.  
  6. namespace Client.Extensions
  7. {
  8.     /// <summary>
  9.     /// Extension to handle a DataGrid's SelectionChanged event to call a command
  10.     /// <remarks>
  11.     /// ext:DataGridSelectedRows.Command="{Binding YourCommand}"
  12.     /// </remarks>
  13.     /// </summary>
  14.     public static class DataGridSelectedRows
  15.     {
  16.         public static readonly DependencyProperty CommandProperty =
  17.             DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(DataGridSelectedRows), new UIPropertyMetadata(null, OnCommandChanged));
  18.          
  19.         public static ICommand GetCommand(DependencyObject obj)
  20.         {
  21.             return (ICommand)obj.GetValue(CommandProperty);
  22.         }
  23.  
  24.         public static void SetCommand(DependencyObject obj, ICommand value)
  25.         {
  26.             obj.SetValue(CommandProperty, value);
  27.         }
  28.  
  29.         static void OnCommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs args)
  30.         {
  31.             if (args.NewValue == null)
  32.                 return;
  33.  
  34.             var dataGrid = target as DataGrid;
  35.             if (dataGrid == null)
  36.                 return;
  37.            
  38.             if (args.OldValue != null)
  39.                 dataGrid.SelectionChanged -= dataGrid_SelectionChanged;
  40.  
  41.             if(args.NewValue != null)
  42.                 dataGrid.SelectionChanged += dataGrid_SelectionChanged;
  43.         }
  44.  
  45.         static void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
  46.         {
  47.             var dataGrid = sender as DataGrid;
  48.             if (dataGrid == null)
  49.                 return;
  50.  
  51.             var command = GetCommand(dataGrid);
  52.             if (command != null)
  53.             {
  54.                 var cmdParam = dataGrid.SelectedItems.Cast<object>();
  55.                 if (command.CanExecute(cmdParam))
  56.                     command.Execute(cmdParam);
  57.             }
  58.         }
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment