Suche…


RowDoubleClick

Es ist eine übliche Anforderung, einen Doppelklick auf eine Zeile in einem RadGridView ausführen zu können. Die von Telerik ( http://demos.telerik.com/silverlight/#GridView/ClickEvents ) vorgeschlagene Lösung basiert auf dem folgenden Code:

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

Wenn Sie MVVM verwenden, möchten Sie wahrscheinlich einen ICommand anhängen, an den der DataContext der angeklickten Zeile als Parameter übergeben wird. So machen Sie das 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;
    }
}

Beispiel ViewModel (verwendet einen Telerik DelegateCommand als Befehl; Sie können jedoch tun, was Sie möchten):

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

ANMERKUNG: Sie werden wissen, welche Art von Elementen sich in der ItemsSource Ihres RadGridView befinden. Stellen Sie in der Execute-Methode Ihres ICommand sicher, dass Sie den Typ des Parameters für den Befehl überprüfen, da durch Klicken auf die Kopf- oder Fußzeile auch dieser Befehl ausgelöst wird. In diesen Szenarien gehört der Parameter jedoch nicht zu Ihren Elementen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow