Recherche…


RowDoubleClick

Il est courant de pouvoir double-cliquer sur une ligne dans un RadGridView. La solution proposée par Telerik ( http://demos.telerik.com/silverlight/#GridView/ClickEvents ) est basée sur le code derrière:

 this.grid.AddHandler(GridViewCellBase.CellDoubleClickEvent, new EventHandler<RadRoutedEventArgs>(OnCellDoubleClick), true);

Si vous utilisez MVVM, vous préférerez probablement attacher un ICommand, qui recevra le DataContext de la ligne sur laquelle vous avez cliqué, en tant que paramètre. Voici comment procéder. XAML:

    <telerik:RadGridView
        ItemsSource="{Binding Rows}"
        IsReadOnly="True"
        ShowGroupPanel="False"
        ShowColumnFooters="True"
        local:RadGridViewAttachedProperties.RowDoubleClickCommand="{Binding DoubleClickRow}"/>

AttachedProperty:

public static class RadGridViewAttachedProperties
{
    public static readonly DependencyProperty RowDoubleClickCommandProperty =
        DependencyProperty.RegisterAttached("RowDoubleClickCommand", typeof(ICommand), typeof(RadGridViewAttachedProperties), new UIPropertyMetadata(null, OnRowDoubleClickCommandChanged));

    public static ICommand GetRowDoubleClickCommand(DependencyObject obj)
    {
        return (ICommand)obj.GetValue(RowDoubleClickCommandProperty);
    }

    public static void SetRowDoubleClickCommand(DependencyObject obj, ICommand value)
    {
        obj.SetValue(RowDoubleClickCommandProperty, value);
    }

    private static void OnMouseDoubleClick(object sender, RoutedEventArgs e)
    {
        var obj = sender as DependencyObject;
        if (obj != null)
        {
            var command = GetRowDoubleClickCommand(obj);
            if (command != null)
            {
                var frameworkElement = e.OriginalSource as FrameworkElement;
                var dataContext = frameworkElement?.DataContext;
                if (command.CanExecute(dataContext))
                {
                    command.Execute(dataContext);
                }
            }
        }
    }

    private static void OnRowDoubleClickCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var controlIsTheRightType = d as RadGridView;
        if (controlIsTheRightType == null)
        {
            return;
        }

        controlIsTheRightType.MouseDoubleClick += OnMouseDoubleClick;
    }
}

Exemple ViewModel (utilise une commande Telerik DelegateCommand comme commande, mais vous pouvez faire ce que vous voulez):

public class MainWindowViewModel
{
    public MainWindowViewModel()
    {
        Rows = new ObservableCollection<string>();
        Rows.Add("kljshndfoa");
        DoubleClickRow = new DelegateCommand(e => MessageBox.Show("Hello " + e));
    }

    public ICommand DoubleClickRow { get; }
    
    public ObservableCollection<string> Rows { get; }
}

REMARQUE: vous saurez quel est le type d'éléments de la source d'éléments de votre RadGridView. Dans la méthode Execute de votre ICommand, assurez-vous de vérifier le type du paramètre de la commande, car cliquer sur l'en-tête ou le pied de page déclenchera également cette commande. mais dans ces scénarios, le paramètre ne sera pas l'un de vos éléments.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow