События пользовательского контроля в VM или View в MVVM - PullRequest
1 голос
/ 14 августа 2011

Я использую шаблон MVVM в своем приложении. У меня есть некоторые проблемы, где обрабатывать события Usercontrol.

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

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

Если пользователь вводит неправильные значения даты, мне также нужно отключить кнопку.

Как лучше всего справляться с этими событиями?

Заранее спасибо.

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

Извините за позднее редактирование.

Ответы [ 2 ]

2 голосов
/ 14 августа 2011

Лучшая практика для обработки описываемых вами событий - не использовать события.Используйте стили для изменения внешнего вида выделенных элементов, команды для включения / отключения кнопок и проверки для изменения внешнего вида элементов управления при вводе неверных данных.

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

2 голосов
/ 14 августа 2011

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

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

Документация MSDN гласит:

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

Надеюсь, это поможет!Когда я попадаю на компьютер с установленной VS, я попытаюсь посмотреть, смогу ли я получить хороший пример использования свойства FocusVisualStyle.Я еще не использовал его, так что это должно быть интересно.: o)

РЕДАКТИРОВАТЬ:

Хорошо, так что для "на фокусе, выделите TextBox border green" вы можете использовать стильочень похоже на это.

   <Window.Resources>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="True">
                    <Setter Property="BorderBrush" Value="Green" />
                    <Setter Property="BorderThickness" Value="2" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

Я увеличил BorderThickness до 2, чтобы изменение на зеленый было более заметным.

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