Как выборочно обновить модель в wpf - PullRequest
1 голос
/ 04 августа 2010

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

Я пытаюсь понять, что делать с кнопками ОК и Отмена. С одной стороны, если я связываю диалог напрямую с моделью listviewitem, кажется, нет способа отменить операцию.

Если, с другой стороны, я даю диалогу клон (не так уж сложный из-за накладных расходов, связанных с тем, чтобы сделать мою модель клонируемым) модели вместо реальной, отмена проста в обработке, но получение новых данных в существующие модель - это боль, потому что потом мне нужно пройти и скопировать все свойства из клона обратно в исходную модель.

Я подозреваю, что для этого есть хороший шаблон дизайна. Есть идеи?

1 Ответ

2 голосов
/ 04 августа 2010

Вы можете изменить все свои привязки, чтобы они были "явными", поскольку они не будут автоматически возвращать значение обратно источнику, а затем заставлять их обновляться при нажатии кнопки ОК.

ДляНапример, давайте свяжем TextBox со свойством модели "Foo" с явным режимом обновления:

<TextBox x:Name="fooEdit" Text="{Binding Foo,UpdateSourceTrigger=Explicit}" />

Затем при нажатии кнопки ОК:

BindingExpression be = fooEdit.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...