0

ここで簡単な質問です。次のような DataGrid があります。

<DataGrid ItemsSource="{Binding Path=Sections}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=ImportName, Mode=OneWay}" Header="Imported" />
        <DataGridTextColumn Binding="{Binding Path=FoundName, Mode=TwoWay}" Header="Suggested" />
    </DataGrid.Columns>
</DataGrid>

「推奨」列のセルを VM のコマンドにバインドして、ユーザーが編集のためにセルをクリックするたびにコマンドが実行され、ユーザーにダイアログが表示されるようにします。ここで説明されている同様の問題に対する興味深い解決策を見つけました: DataGrid bind command to row select

セル編集イベントに付随するコード ビハインドなしで XAML からこれを管理するという事実が気に入っています。残念ながら、行全体ではなく特定の列のセルにコマンドをバインドできるように変換する方法がわかりません。それに関して何かアドバイスはありますか?

4

1 に答える 1

0

BeginningEditコントロールでイベントを使用して、DataGridこのシナリオを処理できます。このイベントは、行またはセルが編集モードに入る前に発生します。選択した列は EventArgs から識別できます。例:

private void dgName_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
        {
            if (e.Column.Header.ToString() == "Suggested")
            {
                //Do Operation
            }
        }

MVVM パターンを使用している場合は、EventArgs を VM に渡すオプションがあります。MVVMLight Toolkit を使用している場合は、というオプションがあり、PassEventArgsそれを に設定しTRUEます。

VMでは、

//リレーコマンド

private RelayCommand<DataGridBeginningEditEventArgs> _cellBeginningEditCommand;
    public RelayCommand<DataGridBeginningEditEventArgs> CellBeginningEditCommand
    {
        get
        {
            return _cellBeginningEditCommand ?? (_cellBeginningEditCommand = new RelayCommand<DataGridBeginningEditEventArgs>(CellBeginningEditMethod));
        }
    }

//コマンドハンドラ

private void CellBeginningEditMethod(DataGridBeginningEditEventArgs args)
        {
            if(args.Column.Header.ToString() == "Suggested")
            {
                //Do Operation
            }
        }
于 2013-08-16T17:43:52.503 に答える