Система свойств WPF Undo Redo для выделения красным цветом, если значение изменилось

У меня есть следующее требование для очень сложного пользовательского интерфейса. (Сложный здесь означает, что в форме много элементов управления [примерно 100]). Я использую MVVM (если моя проблема требует, чтобы он немного отличался от MVVM, я согласен с этим)

Мой вопрос касается Editable ComboBox и < Strong>Текстовое поле. Но я хотел бы услышать общий алгоритм, который подойдет для всех элементов управления.

Требование 1: пользователь редактирует содержимое и переходит к следующему элементу управления, цвет элемента управления/текста должен стать красным.

Требование 2. Когда пользователь возвращается к ранее отредактированному элементу управления и вводит значение, которое было изначально, цвет элемента управления/текста должен снова стать черным.

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

Чтобы дать вам общее представление,
--> я попытался сохранить 2 свойства для каждого TextBox, например Default_Text и Text. Но поскольку количество свойств огромно, объем памяти очень велик. Также очень сложно поддерживать такое количество свойств.
--> Я попытался добавить словарь в каждую ViewModel для хранения измененных значений. Но здесь проблема, с которой я столкнулся, заключалась в том, чтобы дать уникальные ключи всем элементам управления в моем приложении, что не очень полезно
--> Я даже думал и пытался создать подклассы элементов управления, таких как TextBox, ComboBox, и переопределить некоторые методы в соответствии с моими требованиями. , но, к сожалению, я с треском провалился, когда начал добавлять проверки и все такое.

Итак, здесь я застрял в разработке общей системы/алгоритма свойств WPF для обработки всех функций отмены и повтора, изменения стилей элементов управления и т. д. !!!

Будет очень здорово, если вы, эксперты, направите меня в правильном направлении, а также поможете мне в разработке такого алгоритма/системы. Однако примерная иллюстрация будет хороша!!!


person GuruC    schedule 08.10.2010    source источник


Ответы (2)


Я нашел ответ на вышеуказанную проблему. Для этого я использовал прикрепленное поведение. Подробнее по этой ссылке Вызов функции из XAML из StackOverFlow.

При привязке данных я сохраняю начальное значение переменной DataBound в свойстве Tag с помощью Binding=OneWay. Затем я написал прикрепленное поведение для события LostFocus.

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

Прикрепленное поведение рулит в WPF. Я могу добиться всего, что угодно, без загромождения кода!!!!

person GuruC    schedule 11.10.2010

Другой альтернативой является использование некоторого «грязного» отслеживания в ваших моделях (или моделях просмотра) и привязка к свойствам isdirty (и преобразование их в цвет).

person myermian    schedule 29.01.2012