IEditableObject
MVVM ベースの WPF アプリケーションでまだ役立つシナリオを考えられますか? もしそうなら、これを示す例がありますか。
3 に答える
私はIEditableObject
自分のアプリケーションの1つで使用しました。たとえば、何かを編集するためのダイアログがある場合、ViewModel に IEditableObject を実装できます。BeginEdit()
ダイアログが開いEndEdit()
たとき、ユーザーが [OK] をクリックしCancelEdit()
たとき、およびユーザーが [キャンセル ] をクリックしたときに呼び出します。
IEditableObject
変更をロールバックできるようにしたいときはいつでも良いインターフェースです。
IEditableObject
ユーザーが入力したものが無効な場合はデータモデルを更新しないようにし、ユーザーが変更を放棄した場合は元の値にロールバックできるように、アプリケーションに を実装しました。
に表示されているタイプ内DataGrid
。これが必要だったのは、タブを使用していて、セルがアクティブな場合に、DataGrid
いわばコミットを強制するために必要なタブを切り替えてそのタブ内に保存されている場合です。DataGrid
コミットされていないため、変更をロールバックします。T
DataGrid
この機能を実現するために に適用される動作がありますが、そのIEditableObject
部分を以下に示します。
private IDatabaseConnection _copy;
void IEditableObject.BeginEdit()
{
if (this._copy == null)
this._copy = _container.Resolve<IDatabaseConnection>();
_copy.Database = this.Database;
_copy.DisplayName = this.DisplayName;
_copy.HostName = this.HostName;
_copy.Username = this.Username;
_copy.Password = this.Password;
}
void IEditableObject.CancelEdit()
{
this.Database = _copy.Database;
this.DisplayName = _copy.DisplayName;
this.HostName = _copy.HostName;
this.Username = _copy.Username;
this.Password = _copy.Password;
}
void IEditableObject.EndEdit()
{
_copy.Database = String.Empty;
_copy.DisplayName = String.Empty;
_copy.HostName = String.Empty;
_copy.Username = String.Empty;
_copy.Password = String.Empty;
}