0

我有一个 DataGrid 来列出 MobileInfo 集合。DataGrid 配置有SelectionUnit="FullRow". 如果我单击任意行,那么它会选择整行,另外它会指向带有鼠标击中边框的单元格。

边框选择在键盘导航时移动,例如:Left、和。基于单元格选择,我希望从 DataGridTextColumn 检索值RightUpDown

注意:这个问题纯粹是在谈论如何根据传递的输入检索值(处理参数并检索值)。但是“如何在 WPF KeyBinding 中从 DataGrid 传递单元格信息? ”这个问题讨论了如何从 UI 传递信息。在这里,我需要从参数中检索值Android

参考它具有输出屏幕的图像

从 DataGridTextColumn 检索值

在上面的屏幕截图中,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; }
}
4

1 回答 1

0

您可以使用以下方式保存您的选定项目DataGrid

<DataGrid AutoGenerateColumns="False" SelectionUnit="FullRow" IsReadOnly="True"
          ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}" 
          SelectedItem="{Binding SelectedMobile, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

在您的 ViewModel 中,您有:

private MobileInfo selectedMobileInfo;
public MobileInfo SelectedMobileInfo
{
    get{ return selectedMobileInfo; }
    set
    { 
        selectedMobileInfo = value;
        OnPropertyChanged();
    }
}

如果您想要所有选定的项目,您可以将它们作为命令参数传递给您的 ViewModel,例如:

<KeyBinding Key="C" Modifiers="Ctrl" Command="{Binding Path=DataContext.CopyToClipBoardCommand}" CommandParameter="{Binding ElementName=mobileListDataGrid, Path=SelectedItems}" />

在您的DataGrid情况下,您必须x:Name="mobileListDataGrid"为这种方法进行设置。

否则,您可以将所选项目与附加属性绑定。这样,如果您愿意,我会解释。

于 2016-01-13T06:55:27.417 回答