Как я связать MouseDoubleClick событие wpfdatagrid в представлении, как я использую MVVM и Prism 2.MouseDoubleClick события View
1
A
ответ
-1
Слушайте события MouseDoubleClick в отделенном коде от просмотра и вызвать соответствующий метод на ViewModel:
public class MyView : UserControl
{
...
private MyViewModel ViewModel { get { return DataContext as MyViewModel; } }
private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ViewModel.OpenSelectedItem();
}
2
Я предпочитаю добавлять MouseDoubleClickBehaviour, а затем вы можете прикрепить его к любому контролю, который будет связываться с вашей ViewModel. Вызов команд из кода Кода создает прямые зависимости, которые мне не нравятся.
public static class MouseDoubleClickBehaviour
{
public static readonly DependencyProperty CommandProperty =
DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(MouseDoubleClickBehaviour), new UIPropertyMetadata(null, OnCommandChanged));
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.RegisterAttached("CommandParameter", typeof(object), typeof(MouseDoubleClickBehaviour), new UIPropertyMetadata(null));
public static ICommand GetCommand(DependencyObject obj)
{
return (ICommand)obj.GetValue(CommandProperty);
}
public static void SetCommand(DependencyObject obj, ICommand value)
{
obj.SetValue(CommandProperty, value);
}
public static object GetCommandParameter(DependencyObject obj)
{
return obj.GetValue(CommandParameterProperty);
}
public static void SetCommandParameter(DependencyObject obj, object value)
{
obj.SetValue(CommandParameterProperty, value);
}
private static void OnCommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs args)
{
var grid = target as Selector;
////Selector selector = target as Selector;
if (grid == null)
{
return;
}
grid.MouseDoubleClick += (a, b) => GetCommand(grid).Execute(grid.SelectedItem);
}
}
Затем вы можете сделать это в XAML
<ListView ...
behaviours:MouseDoubleClickBehaviour.Command="{Binding Path=ItemSelectedCommand}"
behaviours:MouseDoubleClickBehaviour.CommandParameter="{Binding ElementName=txtValue, Path=Text}"
.../>
+0
Не могли бы вы добавить обработчик для двойного щелчка мыши на объект, который не был выбран MouseDoubleClick селектора в текстовом блоке, например? –
Это не соответствует шаблону MVVM. –