8

IEditableObject您能想到在基于 MVVM 的 WPF 应用程序中仍然有用的场景吗?如果是这样,你有一个例子来证明这一点。

4

3 回答 3

16

IEditableObject在我的一个应用程序中使用过。例如,如果您有一个用于编辑内容的对话框,您可以在 ViewModel 上实现 IEditableObject。您BeginEdit()在对话框打开、EndEdit()用户单击确定以及CancelEdit()用户单击取消时调用。

IEditableObject是一个很好的界面,只要您希望能够回滚更改。

于 2010-12-10T15:32:00.653 回答
3

IEditableObject在我的应用程序中有一个实现,因此如果用户输入的内容无效,我可以避免更新我的数据模型,如果用户放弃更改,我可以回滚到原始值。

于 2010-12-11T00:31:37.557 回答
2

在一个类型中显示在一个DataGrid. 这是需要的,因为当我使用选项卡并且 aDataGrid存储在该选项卡中时,切换了强制提交所需的选项卡,可以说,DataGrid如果单元格处于活动状态;回滚更改,因为它们没有提交。吨

有一种行为被应用于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 回答