DataGrid の行全体が選択されているかどうかを確認する方法
または単一の列のみ
(Binding
またはによってCommand
、 の原則を守りたいMVVM
)。
最後に、私は自分で解決策を見つけました。
(良い検索でそれについて何も見つからなかったのは非常に奇妙です。)
これが私がしたことです:
ViewModelにあるコマンドにバインドするDataGridの2つのイベントを設定しました。
<i:EventTrigger EventName="BeginningEdit">
<i:InvokeCommandAction CommandParameter="{Binding CurrentCell.Column.DisplayIndex, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Command="{Binding DataContext.ColBeginEdit, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
</i:EventTrigger>
<i:EventTrigger EventName="CellEditEnding">
<i:InvokeCommandAction CommandParameter="{Binding CurrentCell.Column.Header, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Command="{Binding DataContext.ColEndEdit, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
</i:EventTrigger>
ビューモデルでは、コマンドに対して2つの関数を呼び出します。
public void CoulmnBeginEdit(object obj)
{
int i;
if (Int32.TryParse(obj.ToString(), out i))
{
if (i > 0)
this.CurrentCellEdit = i;
}
}
public void CoulmnEndEdit(object obj)
{
this.CurrentCellEdit = 0;
}
CurrentCellEditが0より大きい場合は、その行編集に署名します。そうでない場合は署名しません。
SelectedIndexにある行番号、およびCurrentCellEditによると、行のどの列を編集しているかもわかります。
私はもっと簡単な方法を見つけたいと思っていましたが、これがMVVMの原則を維持するために頭に浮かんだ唯一の解決策であり、私はまだ試みています。
プロパティSelectionUnitを「FullRow」に設定できます