WPF: остановка или отмена изменения выбора в списке - PullRequest
6 голосов
/ 17 сентября 2009

Представьте себе: у вас есть окно «Мастер-ребенок», состоящее из списка элементов (главное окно) и набора элементов управления, где вы можете редактировать текущий выбранный элемент (дочернее окно). Дочернее окно имеет кнопки «Применить» и «Отмена».

Пользователь начинает редактирование значений. Затем он меняет выбор, прежде чем нажать кнопку «Применить».

Ваше приложение отображает сообщение «Применить изменения к текущему элементу?» С кнопками «Да», «Нет» и «Отмена». Если пользователь нажимает «Отмена», то попытка изменить текущий выбор не удастся.

Элемент «CurrentSelection» привязан к данным.

Я думал, что смогу разобраться с этим в части "setter" свойства CurrentSelection. Если пользователь выбирает «Отмена», я просто сохраняю элемент CurrentSelection как есть и запускаю событие уведомления PropertyChanged, чтобы сообщить форме об обновлении до старого выбранного элемента. Элемент управления игнорирует это событие уведомления. (Что имеет смысл, Control говорит: «Я знаю, что текущий выбор изменился. Я просто изменил его!»)

Есть идеи, как это исправить? Таким образом, элемент управления пытается изменить границу SelectedItem, и я хочу сказать ему: «Нет, вы не можете изменить этот выбранный элемент прямо сейчас».

Ответы [ 3 ]

3 голосов
/ 17 сентября 2009

И чтобы сделать то, что указал Кент Бугаарт, обратитесь к этому ответу ..

Как запретить привязке WPF игнорировать событие PropertyChanged, которое оно вызвало?

1 голос
/ 17 сентября 2009

Звучит так, будто вы ищете образец сувенира:

http://en.wikipedia.org/wiki/Memento_pattern

Надеюсь, это поможет.

1 голос
/ 17 сентября 2009

Просто мысль, не проверив ее: попробуйте поднять событие свойства изменено в отдельном сообщении. В списке, вероятно, есть защелка, позволяющая игнорировать любые уведомления при изменении значения свойства. Если вы отправите отдельное сообщение, содержащее уведомление, защелка должна быть сброшена, и она должна обработать ее.

...