【发布时间】:2018-06-28 07:49:56
【问题描述】:
我正在使用 VS2015 开发 WPF 应用程序。 在我的一个 WPF 窗口中,我得到了一个带有 SelectionUnit = Cell 和 SelectionMode = Single 的 DataGrid。 此外,我有一种方法可以在 DataGrid 中上下移动行以进行排序。 排序有效,但问题是鼠标光标选择的最后一个单元格在视觉上总是被选中(蓝色背景),这可能会打扰用户。 所以我尝试通过以下代码行删除单元格的视觉标记:
datagrid.UnselectAllCells();
datagrid.SelectedCells.Clear();
这两行都不适合我。 最后选中的单元格仍处于选中状态。
如何删除该选择?
任何帮助将不胜感激。
最后来自 XAML 的 sn-p 与 DataGrid 的定义:
<DataGrid x:Name="grdGraphicalElementMatrix" Grid.Row="1" Grid.Column="0"
HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
CanUserAddRows="True"
IsReadOnly="False"
AutoGenerateColumns="False"
SelectionUnit="Cell" SelectionMode="Single"
CurrentCellChanged="grdGraphicalElementMatrix_CurrentCellChanged"
ItemsSource="{Binding GraphElemMatrix}">
<DataGrid.Columns>
<DataGridTextColumn x:Name="colXAssignment"
Width="1*"
Binding="{Binding Path=X}"
Header="X"/>
<DataGridTextColumn x:Name="colYAssignment"
Width="1*"
Binding="{Binding Path=Y}"
Header="Y"/>
</DataGrid.Columns>
</DataGrid>
grdGraphicalElementMatrix_CurrentCellChanged 是一种方法,当用户单击其中一个单元格以选择它时,我可以在其中获取选定的行和列。
private void grdGraphicalElementMatrix_CurrentCellChanged(object sender, EventArgs e)
{
if (grdGraphicalElementMatrix.CurrentCell != null && grdGraphicalElementMatrix.CurrentCell.Column != null)
{
vm.GrdGraphicalElementMatrixSelColIndex = grdGraphicalElementMatrix.CurrentCell.Column.DisplayIndex;
vm.GrdGraphicalElementMatrixSelRowIndex = grdGraphicalElementMatrix.Items.IndexOf(grdGraphicalElementMatrix.CurrentItem);
}
}
【问题讨论】:
-
您是否使用 MVVM 模式绑定到您的 DataGrid?如果是这样,我可以建议将 SelectedItem 属性绑定到模型中的属性 - 您可以将其设置为 null 并且它应该取消选择网格中的项目。
-
@Johan:你好,约翰。是的,我正在使用 MVVM,但由于 SelectionUnit 单元,我无法使用 SelectedItem。 SelectedItem 仅适用于 SelectionUnit Row。是不是我错了?
-
哦,我明白了,行选择不是问题,而是单个单元格?您使用的是哪个 DataGrid?
-
@Johan:我正在使用 Visual Studio 2015 的标准 DataGrid,.NET Framework 4.5.2。
-
您介意将 Datagrid 的 xaml 添加到您的问题中吗?