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 (कमांड के रूप में एक टेलरिक डेलीगेटकम का उपयोग करता है; लेकिन आप जो चाहें कर सकते हैं):
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 के ItemSource में किस प्रकार की चीज़ें हैं। अपने ICommand के निष्पादन विधि में, सुनिश्चित करें कि आप जाँचें कि कमांड का प्रकार क्या है, क्योंकि हेडर या फ़ूटर पर क्लिक करने से भी इस कमांड को ट्रिगर किया जाएगा; लेकिन उन परिदृश्यों में, पैरामीटर आपके आइटम में से एक नहीं होगा।