telerik
Telerik WPF RadGridView
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.