Проверка Silverlight MVVM в DataForm - PullRequest
0 голосов
/ 13 ноября 2009

Я использую общие классы данных, поэтому я не могу использовать атрибуты ria services для управления моей проверкой - поэтому я ищу способ вручную настроить проверку для работы в DataForm.

public partial class DataValue 
    {
        private Dictionary<string, string> _errors = new Dictionary<string, string>();

        public Dictionary<string, string> Errors
        {
            get { return _errors; }
        }

        public Object Value
        {  
            get 
            {
                object result = new object();
                switch ((DataType)this.ModelEntity.ModelItem.DataType)
                {
                    case DataType.Money: 
                        return result = this.ValueText.ParseNullableFloat(); 
                    case DataType.Integer: 
                        return result = this.ValueText.ParseNullableInt();
                    case DataType.Date:                        
                    case DataType.Time:
                        return result = this.ValueText.ParseNullableDateTime();
                    case DataType.CheckBox:
                        return result = this.ValueText;
                    default:
                        return result = this.ValueText;
                }                
            }

            set
            {
                if (!String.IsNullOrEmpty(value.ToString()))
                {
                    bool invalid = false;
                    switch ((DataType)this.ModelEntity.ModelItem.DataType)
                    {
                        case DataType.Money:
                            float val;
                            if (!float.TryParse(value.ToString(), out val)) invalid = true;
                            break;
                        case DataType.Integer:
                            int val2;
                            if (!Int32.TryParse(value.ToString(), out val2)) invalid = true;
                            break;
                        case DataType.Date:
                        case DataType.Time:
                            DateTime val3;
                            if (!DateTime.TryParse(value.ToString(), out val3)) invalid = true;
                            break;
                    }
                    if (invalid == false)
                        ValueText = value.ToString();
                    else
                    {
                        ValueText = "";
                        _errors.Add(this.ModelEntity.LocalName, "error writing " + value.ToString() + " to " + this.ModelEntity.ModelItem.Label);
                    }
                }
                else
                    ValueText = "";

            }
        }

открытый частичный класс ModelValidater: INotifyPropertyChanging, INotifyPropertyChanged {

    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

    private int _ModelValidatorId;

    private int _ModelEntityId;

    private int _ValidatorType;

    private string _ValidatorParameters;

Итак, в ASP MVC я просто вручную проверял эти правила при отправке формы ... что, я думаю, в значительной степени то, что я хочу сделать в MVVM (я просто не уверен, что это лучший способ сделать это) ,

ASP код

protected bool ModelErrors(RecordDictionary record)
        {
            bool result = false;
            foreach (var field in record)
            {
                foreach (var error in field.Value.Errors)
                {
                    result = true;
                    ModelState.AddModelError(error.Key + "Validation", error.Value.ToString());
                }
            }
            return result;
        }

Ответы [ 2 ]

0 голосов
/ 09 января 2012

Вы можете прикрепить атрибуты проверки, используя атрибут MetadataTypeAttribute.
Службы RIA автоматически сгенерируют эти проверки на клиенте для вас, как только они будут представлены в DomainService.

Пример:

[MetadataType(typeof(ContactMd))]
public partial class Contact
{
    internal class ContactMd
    {
        [MyCustomValidation]
        public string Name { get; set; }
    }
}

(MyCustomValidation относится ко всему, что наследуется от ValidationAttribute).

0 голосов
/ 13 ноября 2009

Встроенная проверка Silverlight 3 основана на исключениях.

Просто добавьте осмысленное исключение в ваш общий Setter, и все будет в порядке. Не забудьте установить ValidatesOnException = True и NotifyOnValidationError = True в {Binding}.

Джесси имеет хороший пример проверки с исключениями в своем блоге.

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