1

ユーザーがビューモデルにバインドされた追加コマンドを使用してのみ新しい行を入力できる 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();
    }
}
4

2 に答える 2

1

この投稿は私にこれを行う方法の手がかりを与えました、大まかに:

  1. バインドされたビューモデルアイテムにIsReadOnlyプロパティを追加します
  2. バインドされたビューモデルアイテムにIsNewプロパティを追加します
  3. 仮想マシンで、実際にアイテムを追加する前に、既存のすべてのアイテムをIsReadOnly=trueに設定します
  4. 新しく追加されたアイテムが編集されたとき、またはその編集がキャンセルされたときは、すべてのアイテムのIsReadOnlyをfalseに戻します。
  5. 投稿の回答と同様の動作を変更します(奇妙なことに、受け入れられた回答ではありませんでした)が、ReadOnlyServiceはありません
  6. DataGridRowのスタイルを設定する

見返り

ここに画像の説明を入力してください

ここに画像の説明を入力してください

于 2012-10-14T22:15:40.037 に答える