ICommand HasErrors не пузырится до родителя - PullRequest
0 голосов
/ 03 мая 2020

Я реализовал асинхронную проверку согласно этой статье .

Я использовал аннотации данных как в своем классе Organization, так и в своем классе Address. Организация имеет свойство OrgnizationName (строка). Свойство Address. Соответствующие биты:

Address.cs

        private string city;
        [Required]
        public string City
        {
            get { return this.city; }
            set
            {
                if (this.city != value)
                {
                    this.city = value;
                    RaisePropertyChanged("City");
                }
            }
        }
// Other Address bits...

Organization.cs

        private string organizationName;
        [Required]
        [StringLength(50)]
        [Display(Name = "Organization")]
        public string OrganizationName
        {
            get { return this.organizationName; }
            set
            {
                if (this.organizationName != value)
                {
                    this.organizationName = value;
                    RaisePropertyChanged("OrganizationName");
                }
            }
        }

        [Required]
        [Display(Name = "Address")]
        public Address Address { get; set; } = new Address();
// Other Organization bits...

Моя виртуальная машина :

OrganizationVM.cs

    public class OrganizationDetailsVM : ValidatableModel
    {
        public Organization Organization { get; set; }

        public OrganizationDetailsVM (Organization inputOrganization)
        {
            Organization = inputOrganization;
            // other bits  here...
        }

        public Command SaveCommand
        {
            get
            {
                return new Command(() =>
                {
                    Debug.Print("Saving Organization...");

                    try
                    {
                        if (Organization.OrganizationID == 0)
                            Organization.AddOrganization();
                        else
                            Organization.UpdateOrganization();
                    }
                    catch (Exception ex)
                    {
                        EventHandler<FailureEventArgs> h = Failure;
                        FailureEventArgs args = new FailureEventArgs { ErrorMessage = ex.ToString() };

                        h?.Invoke(this, args);
                    }                       
                }, () =>
                {
                    return !HasErrors  &&  !Organization.HasErrors  &&  !Organization.Address.HasErrors;
                });
            }
        }
// More bits...

Часть, которая меня запутала, такова:

    return !HasErrors  &&  !Organization.HasErrors  &&  !Organization.Address.HasErrors;

Если я просто использую это:

    return !HasErrors

... он не подхватывает ошибки дочерних свойств. Что мне здесь не хватает?

...