MVVM中的IEditableObject

时间:2010-12-10 15:23:18

标签: wpf mvvm ieditableobject

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

3 个答案:

答案 0 :(得分:15)

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

只要您希望能够回滚更改,

IEditableObject就是一个很好的界面。

答案 1 :(得分:2)

DataGrid中显示的类型中。这是必需的,因为当我使用选项卡并且DataGrid存储在该选项卡中时,切换强制提交所需的选项卡,以便在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;
}

答案 2 :(得分:2)

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