0

MobileInfo コレクションを一覧表示する DataGrid があります。DataGrid は で構成されSelectionUnit="FullRow"ます。任意の行をクリックすると、行全体が選択され、さらにマウスがヒットした境界線のあるセルがポイントされます。

境界線の選択は、キーボード ナビゲーション中に移動します (例: LeftRightUpおよび ) Down。セルの選択に基づいて、DataGridTextColumn から値を取得したい

注:この質問は、渡された入力に基づいて値を取得する方法(パラメーターを処理して値を取得する)について純粋に話しているものです。しかし、「WPF KeyBinding で DataGrid からセル情報を渡す方法は?」この質問は、UI から情報を渡す方法について説明しています。ここで、Paramater から値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();
    }
}

選択したすべてのアイテムが必要な場合は、次のように Command-Parameter として 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 に答える