IEditableObject в MVVM - PullRequest
       46

IEditableObject в MVVM

7 голосов
/ 10 декабря 2010

Можете ли вы вспомнить сценарий, в котором IEditableObject все еще будет полезным в приложении WPF на основе MVVM? Если это так, у вас есть пример, который демонстрирует это.

Ответы [ 3 ]

15 голосов
/ 10 декабря 2010

Я использовал IEditableObject в одном из своих приложений. Например, если у вас есть диалог для редактирования чего-либо, вы можете реализовать IEditableObject в вашей ViewModel. Вы вызываете BeginEdit(), когда открывается диалоговое окно, EndEdit(), когда пользователь нажимает кнопку ОК, и CancelEdit(), когда пользователь нажимает кнопку отмены.

IEditableObject - это хороший интерфейс в любое время, когда вы хотите откатить изменения.

2 голосов
/ 11 декабря 2010

У меня есть реализация IEditableObject в моем приложении, так что я могу не обновлять свою модель данных, если введенные пользователем данные недействительны, и возвращаться к исходным значениям, если пользователь отменяет изменения.

2 голосов
/ 10 декабря 2010

В типе, отображаемом в 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;
}
...