Двойной щелчок по строке в сетке данных в WPF - PullRequest
0 голосов
/ 22 мая 2018

Я хочу иметь функцию в WPF: двойной щелчок по строке в сетке данных покажет ячейки в окне.Как я могу это сделать? Я программирую так, но у меня никогда нет события двойного щелчка.Кто-нибудь может мне помочь?Спасибо.

     <DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left"Margin="14,55,0,46"
                Name="dataGridCustomers" Width="575" ItemsSource="  {Binding Path=LoadDataBinding}"
                CanUserResizeRows="False">




            <DataGrid.RowStyle>
                <Style TargetType="{x:Type DataGridRow}">
                    <EventSetter Event="MouseDoubleClick" Handler="dataGridCustomers_MouseDoubleClick"/>
                </Style>
            </DataGrid.RowStyle>


            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=DEPARTMENT_ID}" Header="DepartmentID" Width="100"
                    IsReadOnly="True" />
                <DataGridTextColumn Binding="{Binding Path=DEPARTMENT_NAME}" Header="Department name" Width="100"
                    IsReadOnly="True" />
                <DataGridTextColumn Binding="{Binding Path=LOCATION}" Header="Location" Width="150"
                    IsReadOnly="True" />

            </DataGrid.Columns>
        </DataGrid>

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Попробуйте это

Так, например, ваш XAML может выглядеть примерно так:

<SomeControl  MouseDown="MyMouseDownHandler">
...
 </SomeControl>

код позади события щелчка ..

private void MyMouseDownHandler(object sender, MouseButtonEventArgs e)
{
    if (e.ClickCount == 2)
    {
        //Handle double-click
    }
}
0 голосов
/ 22 мая 2018

Вы можете подписаться на событие PreviewMouseDoubleClick.

<Style TargetType="DataGridRow">
    <EventSetter Event="PreviewMouseDoubleClick" Handler="OnDoubleClick"/>
</Style>

Обработчик:

private void OnDoubleClick(object sender, MouseButtonEventArgs e)
{
    e.Handled = true;
    System.Diagnostics.Debug.WriteLine("DoubleClick!");
}
0 голосов
/ 22 мая 2018

Просто создайте свое собственное свойство зависимостей DataGridDoubleClickProperty, к которому вы прикрепляете обработчик для события DataGrid.MouseDoubleClick

public static class Commands
{
  public static readonly DependencyProperty DataGridDoubleClickProperty =
    DependencyProperty.RegisterAttached("DataGridDoubleClickCommand", typeof ( ICommand ), typeof ( Commands ),
                      new PropertyMetadata(new PropertyChangedCallback(AttachOrRemoveDataGridDoubleClickEvent)));

  public static ICommand GetDataGridDoubleClickCommand(DependencyObject obj)
  {
    return (ICommand) obj.GetValue(DataGridDoubleClickProperty);
  }

  public static void SetDataGridDoubleClickCommand(DependencyObject obj, ICommand value)
  {
    obj.SetValue(DataGridDoubleClickProperty, value);
  }

  public static void AttachOrRemoveDataGridDoubleClickEvent(DependencyObject obj, DependencyPropertyChangedEventArgs args)
  {
    DataGrid dataGrid = obj as DataGrid;
    if ( dataGrid != null )
    {
      ICommand cmd = (ICommand) args.NewValue;

      if ( args.OldValue == null && args.NewValue != null )
      {
        dataGrid.MouseDoubleClick += ExecuteDataGridDoubleClick;
      }
      else if ( args.OldValue != null && args.NewValue == null )
      {
        dataGrid.MouseDoubleClick -= ExecuteDataGridDoubleClick;
      }
    }
  }

  private static void ExecuteDataGridDoubleClick(object sender, MouseButtonEventArgs args)
  {
    DependencyObject obj = sender as DependencyObject;
    ICommand cmd = (ICommand) obj.GetValue(DataGridDoubleClickProperty);
    if ( cmd != null )
    {
      if ( cmd.CanExecute(obj) )
      {
        cmd.Execute(obj);
      }
    }
  }

}

В своем представлении вы используете Binding для сопоставления этого свойства DependencyProperty с командой

<Grid DataContext="{StaticResource viewModel}">
  <DataGrid AutoGenerateColumns="True" 
        ItemsSource="{Binding Data}" 
        SelectedItem="{Binding SelectedItem}" 
        clr:Commands.DataGridDoubleClickCommand="{Binding DataGridDoubleClick}"
    />
</Grid>

DataGridDoubleClickтакое свойство ICommand в вашем классе ViewModel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...