ユーザーがビューモデルにバインドされた追加コマンドを使用してのみ新しい行を入力できる DataGrid があります。以下に示すアタッチされた動作は、正しいセルをアクティブにします。
私が今やりたいことは、新しい行を効果的に「モーダル」にすることです。つまり、新しい行が有効になってコミットされるまで、または編集がキャンセルされるまで、ユーザーがグリッドで他の操作を実行できないようにしたいと考えています。
ビュー モデルがいつ有効で IEditableObject を実装するかを認識していると仮定すると、アタッチされたビヘイビアからすべてを取得できますか? 何をしなければなりませんか?
乾杯、
ベリル
コード
public class NewItemAddedByCommandBehavior : Behavior<DataGrid>
{
private MainWindowViewModel _vm;
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.DataContextChanged += OnAssociatedObject_DataContextChanged;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.DataContextChanged -= OnAssociatedObject_DataContextChanged;
_vm.NewItemAddedByCommand -= OnNewItemAddedByCommand;
}
private void OnAssociatedObject_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) {
_vm = (MainWindowViewModel) AssociatedObject.DataContext;
_vm.NewItemAddedByCommand += OnNewItemAddedByCommand;
}
private void OnNewItemAddedByCommand(object sender, EventArgs e)
{
var currentItem = _vm.SelectedItem;
var col = AssociatedObject.Columns[1];
AssociatedObject.CurrentCell = new DataGridCellInfo(currentItem, col);
AssociatedObject.ScrollIntoView(currentItem, col);
AssociatedObject.Focus();
AssociatedObject.BeginEdit();
}
}