WPF Undo Redo Property System для выделения красным цветом, если значение изменилось - PullRequest
0 голосов
/ 08 октября 2010

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

Мой вопрос для Редактируемый ComboBox и TextBox .Но я бы сказал, что мне нравится слышать общий алгоритм , который будет соответствовать всем элементам управления.

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 29 января 2012

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

0 голосов
/ 11 октября 2010

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

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

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

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

...