1

ソース プロパティを介して ObservableCollection を xamdatagrid にバインドしています。

<igDP:XamDataGrid DataSource="{Binding Path=MyCollection}" />

私ができる1つの方法は、使用することです

_items.CollectionChanged += ItemsChanged

しかし、アイテムはすでに削除されているため、これでは遅すぎるようです。それに対する良い解決策はありますか?

アップデート

項目は xamdatagrid を介してユーザーが手動で削除します。

ありがとう

4

3 に答える 3

2

グリッドで行を直接削除しないでください。UI はビジネス アクションの実行を担当しません。これは ViewModel によって実行され、ViewModel が検証を行う前に実行する必要があります。

AllowDelete="False"

データグリッドで:

<DataGrid.InputBindings>
    <KeyBinding Key="Delete" Command="{Binding DeleteOrderCommand}" />
</DataGrid.InputBindings>

View Model には、DeleteOrderCommand があります。

このビューを他のテクノロジーに置き換え、新しいコントロールに行削除オプションがない場合は、ボタンを使用します。したがって、ボタンが DeleteOrderCommand またはこのコマンドが呼び出しているメソッドにバインドされるため、ViewModel を引き続き再利用できます。また、検証は ViewModel にあるため、新しいテクノロジで View に切り替えても消えません。

更新: 検証目的で、または Command の Execute メソッドでより便利な場合は、DeleteOrderCommand で CanExecute を使用できます。

于 2013-09-12T08:39:24.693 に答える
0
  1. 解決:

    Command最善の方法は、ViewModelで a を含むアイテムを削除することだと思います。このようにして、コマンドの CanExecute メソッドで検証を行うことができ、有効でない場合は実行できません。InputBindingsまたはEventToCommandを使用して、ユーザーの操作後にコマンドを起動できます。

  2. 解決

    ObservableCollection から継承し、RemoveItem メソッドをオーバーライドしてそこで検証を行うこともできますが、上記の方法で行うことをお勧めします。

于 2013-09-12T08:49:58.657 に答える