在DataGrid中自定义单击行为

时间:2011-12-12 03:03:53

标签: c# wpf datagrid mouseevent

我有一个显示自定义数据类型内容的数据网格。

<DataGrid Name="TestGrid" ItemsSource="{Binding Source={StaticResource Data}}" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Header="Value 1" Binding="{Binding Value1, StringFormat={}{0:C}}"/>
    <DataGridTextColumn Header="Value 2" Binding="{Binding Value2, StringFormat={}{0:#.00}}"/>
  </DataGrid.Columns>

我想为每个DataGridTextColumn将不同的命令绑定到MouseLeftButtonDown和MouseRightButtonDown事件。我可以使用DataGridTemplateColumn的CellEditingTemplate来做一些输入的自定义,但是无法弄清楚如何获得我想要的行为。

编辑:我的目标是左键单击增加值,右键单击减少它,+ / - 的大小会因列而异。

编辑2:您似乎可以使用触发器基于鼠标事件更改样式,但这似乎不适用于更改数据本身。我倾向于放弃数据网格并使用ListView

1 个答案:

答案 0 :(得分:3)

以下是我对这个主题的看法:

  1. 根据我的理解,您似乎不需要在dataGrid中使用任何编辑功能。在这种情况下,使用ListView确实会更好。

  2. 如果你想继续使用dataGrid,最简单的方法就是使用TextBoxColumn.CellStyle并在那里添加事件监听器。如果这样做,您必须确保在处理程序中更新ViewModel的值。

  3. 尝试这样的方式:

    <DataGrid Name="TestGrid" ItemsSource="{Binding Source={StaticResource Data}}" AutoGenerateColumns="False">
         <DataGrid.Columns>
              <DataGridTextColumn Header="Value 1" Binding="{Binding Value1, StringFormat={}{0:C}}">
                  <DataGridTextColumn.CellStyle>
                       <Style TargetType="DataGridCell">
                            <EventSetter Event="MouseLeftButtonDown" Handler="MyMouseLeftButtonDownHandler" />
                            <EventSetter Event="MouseRightButtonDown" Handler="MyMouseRightButtonDownHandler" />
                        </Style>
                   </DataGridTextColumn.CellStyle>
              </DataGridTextColumn>
              <DataGridTextColumn Header="Value 2" Binding="{Binding Value2, StringFormat={}{0:#.00}}">
                  <DataGridTextColumn.CellStyle>
                       <Style TargetType="DataGridCell">
                            <EventSetter Event="MouseLeftButtonDown" Handler="MyMouseLeftButtonDownHandler" />
                            <EventSetter Event="MouseRightButtonDown" Handler="MyMouseRightButtonDownHandler" />
                       </Style>
                  </DataGridTextColumn.CellStyle>
              </DataGridTextColumn>
         </DataGrid.Columns>
    </DataGrid>
    

    或创建自己的MyDataGridTextBoxColumn类继承原始类,并将样式添加到列的xaml定义中的列的cellStyle中。 (这样你只有一个共同的代码部分)

    然后在处理程序中,您可以轻松推断出单击的单元格,并相应地增加或减少viewModel。