我有一个 DataGrid 来列出 MobileInfo 集合。DataGrid 配置有SelectionUnit="FullRow"
. 如果我单击任意行,那么它会选择整行,另外它会指向带有鼠标击中边框的单元格。
边框选择在键盘导航时移动,例如:Left
、和。基于单元格选择,我希望从 DataGridTextColumn 检索值Right
Up
Down
注意:这个问题纯粹是在谈论如何根据传递的输入检索值(处理参数并检索值)。但是“如何在 WPF KeyBinding 中从 DataGrid 传递单元格信息? ”这个问题讨论了如何从 UI 传递信息。在这里,我需要从参数中检索值Android。
参考它具有输出屏幕的图像
在上面的屏幕截图中,Android 被选中,基于键盘导航,单元格选择发生变化。
我的 XAML 源代码:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}" SelectionUnit="FullRow" IsReadOnly="True">
<DataGrid.InputBindings>
<KeyBinding Key="C" Modifiers="Ctrl" Command="{Binding Path=DataContext.CopyToClipBoardCommand}" CommandParameter="{Binding }" />
</DataGrid.InputBindings>
<DataGrid.Columns>
<!--Column 1-->
<DataGridTextColumn Binding="{Binding MobileName}" Header="Name" />
<!--Column 2-->
<DataGridTextColumn Binding="{Binding MobileOS}" Header="OS" />
</DataGrid.Columns>
</DataGrid>
注意:不要更改 DataGrid 中的 SelectionUnit 并使用 MVVM 方法提供答案
请提供您的解决方案,如何根据键盘导航传递单元格信息
与 XAML DataGrid 关联的 C# 源代码
public class GridViewModel
{
public ObservableCollection<MobileInfo> MobileList { get; set; }
public GridViewModel()
{
MobileList = new ObservableCollection<MobileInfo>();
MobileList.Add(new MobileInfo { MobileName = "iPhone", MobileOS = "iOS" });
MobileList.Add(new MobileInfo { MobileName = "Xperia", MobileOS = "Android" });
MobileList.Add(new MobileInfo { MobileName = "Lumina", MobileOS = "Windows" });
}
}
public class MobileInfo
{
public string MobileName { get; set; }
public string MobileOS { get; set; }
}