我有一个显示自定义数据类型内容的数据网格。
<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
答案 0 :(得分:3)
以下是我对这个主题的看法:
根据我的理解,您似乎不需要在dataGrid中使用任何编辑功能。在这种情况下,使用ListView确实会更好。
如果你想继续使用dataGrid,最简单的方法就是使用TextBoxColumn.CellStyle并在那里添加事件监听器。如果这样做,您必须确保在处理程序中更新ViewModel的值。
尝试这样的方式:
<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。