リレー コマンドとデータ バインドとして MVVM を使用して、C# WPF で単純なデータベース アプリケーションを作成しています。私が使用するデータベース コンテンツのインメモリ ストレージにはObservableCollection
、次のように Datagrid にバインドされます。
<DataGrid ItemsSource="{Binding Path=Softwares, Mode=OneWay}" SelectedItem="{Binding Path=SoftwareSelection, Mode=TwoWay}">
項目が選択されると、ユーザーはそれを編集することを選択できます。編集のために、特定のエンティティのデータを含む一連のテキスト ボックスを含むフォームが開かれます。すべてのフィールドは を使用して検証IDataErrorInfo
されます。すべてのテキスト ボックスが有効でない限り、[OK] ボタンは有効になっていないため、コレクションやデータベースに変更を保存することはできません。
テキストボックスの例は次のようになります。
<TextBox Text="{Binding Name, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"/>
しかし、難しいのは、テキスト ボックスの値を変更してからウィンドウを閉じると、新しい値が に反映されるObservableCollection
ことです。これは望ましくありません。そのような行動を防ぐ方法はありますか?ボタンをクリックした後にのみデータバインディングが機能するようにします。それ以外の場合、データバインディングはうまく機能するため、クリック後にボタンが (無効化/有効化) 有効になり、データベースとコレクションへの変更が反映されます。どちらのビューも異なる ViewModel によって処理され、ビュー間のデータはイベントの発生によって渡されます。
ItemsSource バインディングに追加しようとしましたDataGrid
UpdateSourceTrigger=Explicit
が、役に立ちませんでした。おそらく、いくつかのアプリケーション ロジックが不足していますか?
ご助力ありがとうございます。