telerik
Telerik WPF RadGridView
Поиск…
RowDoubleClick
Это обычный запрос, чтобы иметь возможность обрабатывать двойной щелчок по строке в RadGridView. Решение, предложенное Telerik ( http://demos.telerik.com/silverlight/#GridView/ClickEvents ), основано на коде:
this.grid.AddHandler(GridViewCellBase.CellDoubleClickEvent, new EventHandler<RadRoutedEventArgs>(OnCellDoubleClick), true);
если вы используете MVVM, вы, вероятно, предпочтете присоединить ICommand, которому будет передан DataContext строки, на которую была нажата кнопка, в качестве параметра. Вот как это сделать. 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;
}
}
Пример ViewModel (используется команда Telerik DelegateCommand в качестве команды, но вы можете делать то, что вам нравится):
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; }
}
ПРИМЕЧАНИЕ. Вы узнаете, что такое тип вещей в вашем элементе питания RadGridView. В методе Execute вашей ICommand убедитесь, что вы проверяете, какой тип параметра указан в команде, поскольку нажатие на верхний или нижний колонтитул также вызывает эту команду; но в этих сценариях параметр не будет одним из ваших элементов.