Как проверить входные данные при нажатии кнопки в Silverlight? - PullRequest
4 голосов
/ 25 ноября 2010

Я использую DataAnnotation для проверки элементов управления вводом. Но ValidatesOnExceptions работает только тогда, когда пользователь вводит что-то в текстовое поле и нажимает клавишу Tab. (В основном о событии Lostfocus).

, но если пользователь никогда ничего не вводит в текстовое поле и не нажимает кнопку Отправить. Это не работает. Как и свойство ASP.NET Page.IsValid, есть ли какое-либо свойство или метод в Silverlight, который я могу использовать, который будет проверять все элементы управления в пользовательском интерфейсе?

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Получив помощь по URL, предоставленному Теренсом, я подготовил для вас решение, приведенное ниже.Это можно использовать, чтобы убедиться, что все свойства установлены перед вызовом службы.

public class PersonViewModel : EntityBase 
{
    private readonly RelayCommand saveCommand;

    public PersonViewModel(IServiceAgent serviceAgent)
    {
        saveCommand = new RelayCommand(Save) { IsEnabled = true };
    }   

    public RelayCommand SaveCommand // Binded with SaveButton
    {
        get { return saveCommand; }
    }   

    public String Name // Binded with NameTextBox
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
            PropertyChangedHandler("Name");                
            ValidateName("Name", value);
        }
    }

    public Int32 Age // Binded with AgeTextBox
    {
        get
        {
            return age;
        }
        set
        {
            age = value;
            PropertyChangedHandler("Age");
            ValidateAge("Age", value);
        }
    }

    private void ValidateName(string propertyName, String value)
    {
        ClearErrorFromProperty(propertyName);
        if (/*SOME CONDITION*/)     
            AddErrorForProperty(propertyName, "/*NAME ERROR MESSAGE*/");        
    }

    private void ValidateAge(string propertyName, Int32 value)
    {
        ClearErrorFromProperty(propertyName);
        if (/*SOME CONDITION*/)     
            AddErrorForProperty(propertyName, "/*AGE ERROR MESSAGE*/");             
    }   

    public void Save() 
    {
        ValidateName("Name", name);
        ValidateAge("Age", age);        
        if (!HasErrors)
        {                
            //SAVE CALL TO SERVICE
        }
    }       
}
0 голосов
/ 27 ноября 2010

Я не думаю, что есть способ проверить ВСЕ UserControls, которые видны на странице.Но я бы порекомендовал вам взглянуть на INotifyDataErrorInfo.Это, на мой взгляд, лучший способ проверки данных в Silverlight.С подходом INotifyDataErrorInfo вам не нужно вносить изменения в представление (например, ValidatesOnException, ...), и вы можете легко выполнить проверку в WebService (это невозможно с аннотациями данных).1002 * Посмотрите здесь: http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2009/11/18/silverlight-4-rough-notes-binding-with-inotifydataerrorinfo.aspx

Надеюсь, это вам поможет.

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