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
в моем приложении, чтобы я мог не обновлять свою модель данных, если то, что ввел пользователь, недопустимо, и откат к исходным значениям, если пользователь отказывается от изменений.