Проверка формы - PullRequest
       3

Проверка формы

6 голосов
/ 08 марта 2012

Мне нужно разработать приложение для Windows Phone 7. И по понятным причинам я должен проверить свои формы.

Я обычно программирую на WPF и использую принцип ValidationRule. Но я не могу найти тот же принцип в Windows Phone 7.

Отсюда мой вопрос, как создать проверку формы.

Ответы [ 2 ]

4 голосов
/ 08 марта 2012

Windows Phone не поддерживает проверки форм из коробки.

Вот сообщение в блоге , в котором описывается, как развернуть пользовательский элемент управления для реализации правил проверки.

То, как я справлюсь с этим в одном из моих собственных приложений, заключается в том, чтобы поместить логику проверки в мой класс модели и создать свойство IsValid в модели. Класс модели также будет иметь свойство Error с сообщением об ошибке, описывающим проблему проверки. Мой уровень пользовательского интерфейса вызовет myModel.IsValid и отобразит сообщение об ошибке, если что-то не так.

0 голосов
/ 10 марта 2012

Я скопировал тот же подход, который использовал Silverlight на настольных компьютерах: интерфейс INotifyDataErrorInfo .

Здесь Я описал это более подробно, и здесь Вы можете загрузить исходный код примера проекта.

Самый простой пример выглядит так:

View.xaml

<TextBox Text="{Binding SomeProperty, Mode=TwoWay, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" 
         Style="{StaticResource ValidationTextBoxStyle}" />

View.xaml.cs

public MainPage()
{
    InitializeComponent();
    this.BindingValidationError += MainPage_BindingValidationError;
}

private void MainPage_BindingValidationError(object sender, ValidationErrorEventArgs e)
{
    var state = e.Action == ValidationErrorEventAction.Added ? "Invalid" : "Valid";

    VisualStateManager.GoToState((Control)e.OriginalSource, state, false);
}

ViewModel.cs

public class MainViewModel : ValidationViewModel
{
    public MainViewModel()
    {
        this.Validator.AddValidationFor(() => this.SomeProperty).NotEmpty().Show("Enter a value");
    }

    private string someProperty;

    public string SomeProperty
    {
        get { return someProperty; }
        set
        {
            someProperty = value;
            RaisePropertyChanged("SomeProperty");
        }
    }
}

Он опирается на множество дополнительных классов, но в то же время есть небольшой код, который вы напишите сами.

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