8

IEditableObjectMVVM ベースの WPF アプリケーションでまだ役立つシナリオを考えられますか? もしそうなら、これを示す例がありますか。

4

3 に答える 3

16

私はIEditableObject自分のアプリケーションの1つで使用しました。たとえば、何かを編集するためのダイアログがある場合、ViewModel に IEditableObject を実装できます。BeginEdit()ダイアログが開いEndEdit()たとき、ユーザーが [OK] をクリックしCancelEdit()たとき、およびユーザーが [キャンセル ] をクリックしたときに呼び出します。

IEditableObject変更をロールバックできるようにしたいときはいつでも良いインターフェースです。

于 2010-12-10T15:32:00.653 に答える
3

IEditableObjectユーザーが入力したものが無効な場合はデータモデルを更新しないようにし、ユーザーが変更を放棄した場合は元の値にロールバックできるように、アプリケーションに を実装しました。

于 2010-12-11T00:31:37.557 に答える
2

に表示されているタイプ内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;
}
于 2010-12-10T15:32:35.410 に答える