Отмена двухстороннего связывания данных в Silverlight - PullRequest
2 голосов
/ 21 июля 2009

У меня есть ObervableCollection элементов данных. Эта коллекция привязана к ListBox. Когда пользователь выбирает элемент из списка и нажимает кнопку «Редактировать», отображается пользовательский элемент управления с подробной информацией об этом элементе, различные свойства которого привязаны к текстовым полям. Каждый режим привязки установлен для TwoWay. На этой детали UserControl, я хотел бы реализовать 2 кнопки, OK и Отмена. Это будет соответствовать пользовательским интерфейсам в Windows. Это приложение использует шаблон Model-View_ViewModel. Вот мой вопрос:

1) Как реализовать кнопку Отмена, когда все изменения уже зафиксированы?

Ответы [ 2 ]

0 голосов
/ 21 июля 2009

Короткий ответ: ты не можешь. Исходные значения в объекте данных нигде не хранятся в SL, поэтому, если вы не измените свой процесс, вы не сможете отменить изменения, сделанные в результате привязки данных.

Я бы предложил сделать копию объекта, который вы хотите редактировать, прежде чем поместить его в диалоговое окно. Если ваш объект прост, вы можете легко добавить член «MakeCopy»:

public MyObject MakeCopy()
{
    return (MyObject)base.MemberwiseClone();
}
0 голосов
/ 21 июля 2009

Вы можете привязать к копии реальной коллекции, а затем зафиксировать изменения только одним щелчком мыши, или вы можете переделать ваши объекты данных, чтобы разрешить транзакционные изменения, в результате чего вы можете вызвать Commit или Rollback в зависимости от результата диалога. *

...