IEditableObject в MVVM

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

3 ответов


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

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;
}

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