使用MVVM单击DataGrid Single Cell行和列

时间:2015-07-14 18:39:36

标签: c# wpf mvvm datagrid model-view

我有DataGrid,我正在尝试使用MVVM获取所选单元格的单元格详细信息(列,行和值),并避免对后面的代码进行任何更改。

我的数据网格看起来像这样

<DataGrid x:Name="MyDataGrid" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=MyData}" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="None" SelectionUnit="Cell">
    <DataGrid.Columns>
        <DataGridTextColumn  Header="a" Width="130" Binding="{Binding Path=A}"/>
        <DataGridTextColumn  Header="b"   Width="100" Binding="{Binding Path=B}"/>
        <DataGridTextColumn  Header="c"   Width="100" Binding="{Binding Path=C}"/>
    </DataGrid.Columns>
    <DataGrid.InputBindings>
        <MouseBinding Gesture="LeftClick"  Command="{Binding DataGridLeftClick}" CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedCells}" />
    </DataGrid.InputBindings>

在我的ViewModel中

   DataGridLeftClick = new RelayCommand(LeftClick);
   ...

   public ICommand DataGridLeftClick { get; private set; }

   public void LeftClick(object obj)
   {   
       log.Info(obj);
   }

该命令有效,但有两件事obj的值始终为null。如果我删除网格的SelectionUnit(所以我假设它默认为FullRow)然后我得到完整行单元格的数据。如何获取单击的单元格的单元格行,索引和值?

谢谢, 尼克

1 个答案:

答案 0 :(得分:1)

您是否考虑过DataGridView.CurrentCell属性并绑定到VM {Binding CurrentCellVMProperty,Mode = OneWayToSource}。

另请参阅此答案:How to Bind CurrentCell in WPF datagrid using MVVM pattern