2011-12-12 68 views
0

我有一個datagrid顯示自定義數據類型的內容。DataGrid中的自定義點擊行爲

<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> 

我想,以配合不同的命令到的MouseLeftButtonDown和事件的MouseRightButtonDown每個DataGridTextColumn。我可以使用DataGridTemplateColumn的CellEditingTemplate對輸入進行一些自定義,但一直未能弄清楚如何獲得我想要的行爲。

編輯:我的目標是左鍵單擊增加值,右鍵點擊減少它,+/-的大小將逐列變化。

編輯2:您似乎可以使用觸發器更改基於鼠標事件的樣式,但這似乎不適用於更改數據本身。我對放棄的DataGrid,並與一個ListView

回答

3

這裏發生傾斜是我的想法關於這個問題:

  1. 你似乎沒有從我的理解需要在你的數據網格的任何編輯功能。在這種情況下,使用ListView確實會更好。

  2. 如果你想繼續使用你的dataGrid,最簡單的方法就是使用TextBoxColumn.CellStyle並在那裏添加事件監聽器。如果你這樣做,你必須確保你更新你的處理程序中的ViewModel值。

嘗試sompething這樣的:

<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。