Реализации IEditableObjectC#

Место общения программистов C#
Ответить
Anonymous
 Реализации IEditableObject

Сообщение Anonymous »

Я искал реализацию универсального класса, который реализует IEditableObject для наследования некоторых моих моделей ViewModel, чтобы поддерживать отмену редактирования свойств в этой ViewModel. В основном это используется для модальных диалогов в WPF с кнопками "ОК" и "Отмена".
Я нашел в Интернете следующие реализации:
  • Общая реализация IEditableObject через TypeDescriptor и Reflection
  • Пол Стовелл: Адаптер IEditableObject для WPF и Windows Forms
Это кажется для меня это слишком сложно, но я не уверен, что мне не хватает некоторых функций, которые они предоставляют. Во-первых, они не поддерживают глубокое копирование, поэтому в моем мире мы могли бы просто использовать MemberwiseClone для выполнения поверхностного копирования. Что-то вроде:

Код: Выделить всё

private Item backupCopy;
private bool inEdit;

public void BeginEdit()
{
if (inEdit) return;
inEdit = true;
backupCopy = this.MemberwiseClone() as Item;
}

public void CancelEdit()
{
if (!inEdit) return;
inEdit = false;
this.Name = backupCopy.Name;
}

public void EndEdit()
{
if (!inEdit) return;
inEdit = false;
backupCopy = null;
}
Этот пример, конечно, должен быть в общем абстрактном базовом классе для наследования ViewModels, но вы поняли...
Что такое разница здесь? Каковы недостатки моего подхода, помимо отсутствия поддержки глубокого копирования? Как бы вы изменили его для поддержки глубокого копирования (пока не совсем уверены, необходимо ли это)?
Обновление:
Нашел эту статью, показывающую лучшую реализацию. чем мой, использующий отражение. Все еще намного проще, чем две другие статьи, на которые я дал ссылку:
  • Многократное использование EditableModelBase с использованием IEditableObject
Как мы можем расширить это для поддержки глубокого копирования?

Подробнее здесь: https://stackoverflow.com/questions/149 ... mentations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»