Silverlight Обязательное свойство TextBox Attached - PullRequest
1 голос
/ 28 мая 2010

У меня есть необходимость создать прикрепленное свойство для TextBox, которое применяет правило о том, что контент требуется.

ПРИМЕЧАНИЕ: К сожалению, я не могу использовать аннотации данных или платформы проверки SL4.

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

Теперь у меня это работает через LostFocus событие:

    public static readonly DependencyProperty RequiredProperty =
        DependencyProperty.RegisterAttached("Required", typeof(bool), typeof(TextBoxRequiredService),
                                            new PropertyMetadata(OnRequiredChanged));

    public static bool GetRequired(DependencyObject d)
    {
        return (bool)d.GetValue(RequiredProperty);
    }

    public static void SetRequired(DependencyObject d, bool value)
    {
        d.SetValue(RequiredProperty, value);
    }

    private static void OnRequiredChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        TextBox textBox = d as TextBox;
        textBox.LostFocus += (s, args) => {
            if (textBox.Text.Length == 0) {
                MessageBox.Show("Required Field!");
                textBox.Focus();
            }
        };
    }

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

Итак, есть ли у кого-нибудь хорошие предложения (или примеры) о том, как получить услугу «Обязательное текстовое поле», работающую в рамках определенного действия? Или, может быть, какие-нибудь умные альтернативы LostFocus , которые я мог бы использовать?

Спасибо, Mark

...