2012-05-16 3 views
5

Я просто искал Google около 2 часов и ничего не нашел.Windows 8 Metro: Внедрение валидации

Учитывая следующий сценарий:

public class Person 
{ 
    [Required] 
    public string Name { get; set; } 
} 

XAML:

<TextBox Text="{Binding Name, Mode=TwoWay}" /> 

Как бы вы о автоматически получить обратную связь от проверки на UI, как есть в MVC3?

(О, и я действительно не волнует, на данный момент, если я мог бы использовать интегрированные DataAnnotations как [обязательно] или нет)

Любая помощь очень ценится!

ответ

13

Я добавил что-то к WinRT XAML Toolkit. Это называется TextBoxValidationExtensions и позволяет определить проверки, как это:

<TextBox 
    Width="400" 
    HorizontalAlignment="Left" 
    xyzc:TextBoxValidationExtensions.Format="NonEmptyNumeric" 
    xyzc:TextBoxValidationExtensions.InvalidBrush="Red" 
    xyzc:TextBoxValidationExtensions.ValidBrush="Green" /> 

форматы в настоящее время определяется как:

[Flags] 
public enum ValidTextBoxFormats 
{ 
    Any = 0, 
    NonEmpty = 1, 
    Numeric = 2, 
    NonEmptyNumeric = 3 
} 

Весь код немного слишком долго, чтобы поделиться здесь. Вы можете взять код из CodePlex и модифицировать по своему вкусу - добавить новые правила проверки, изменять стандартные кисти и т.д.

+0

Кажется, это трюк! В любом случае, можете ли вы объяснить мне, как я смогу установить это в коде, а не в XAML? – Shion

+0

Если вы используете MVVM, тогда у вас будет какая-то модель представления для поля с свойствами текста и формата, поэтому вы просто установите привязку как xyzc: TextBoxValidationExtensions.Format = "{Binding Format}". Если вы просто делаете код позади, вы вызываете TextBoxValidationExtensions.SetFormat (myTextBox, ValidTextBoxFormats.Numeric). –

+0

Еще одно решение было описано Джерри Никсоном в его блоге [здесь - Let's Code! Обработка проверки в приложении Windows Store] (http://blog.jerrynixon.com/2014/07/lets-code-handling-validation-in-your.html). –

0

Просто используйте событие в частности XAML контроля, например, если в textbox использования pointerexited и написать функцию в коде чтобы выполнить требуемую проверку.

+0

Хотя вопрос уже был дан: ваше предложение привело бы к очень продуманному и трудноподдерживающемуся коду. Филипп Скакун (в принятом ответе!) Уже отлично ответил. :) – Shion

-1

Похоже, что на основе поддержки, предоставляемой в рамках, ваша необычная идея «проверять» текстовое поле настолько редка и необычна, что ее вообще не нужно рассматривать. Мы все знаем, что если то, что вы хотели сделать, было бы общим или полезным, в такой хорошо продуманной и всеобъемлющей структуре было бы некоторое внимание к такой функции.

+0

Почему не нужно проверять текстовое поле, например, на URL, номер, базовую электронную почту или что-то еще? Конечно, вы можете сделать валидацию одним нажатием кнопки и добавить нужный стиль в текстовое поле, но иногда это не то, что нужно. А также: только потому, что это не в рамках, это не значит, что это нежелательно/необходимо. – Shion

+0

@Shion найти словарь и посмотреть слово «sarcasm» – HappyNomad

+0

Есть люди, которые имеют в виду такие вещи, как ответ выше серьезных ... – Shion