首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDataErrorInfo问题

IDataErrorInfo问题
EN

Stack Overflow用户
提问于 2013-02-09 00:26:38
回答 1查看 142关注 0票数 0

在我的视图模型类中有两个属性,比如Size,StrVal。约束之一是StrVal长度应小于或等于大小;此约束适用于IDataErrorInfo索引器。

代码语言:javascript
复制
public string this[string propertyName]
    {

       get
       {
            string msg = null; ;
            switch (propertyName)
            {
                ....

                case "StrVal":
                    {
                        if (this.StrVal.Length > this.SizeOfStringVal)
                        {
                            msg = "Size of entered value is greater than the size";
                        }
                    }
                    break;

                .........

            }
            return msg;
        }
    }

现在考虑以下情况

代码语言:javascript
复制
Size = 5;
StrVal = "ABCDEF" ; // length = 6 > Size
"Error message is generated"
Size = 7 // length of StrVal is less than 7

但是在我以编程方式触发"StrVal“属性的propertyChanged事件之前,视觉上仍然会显示错误情况。出于这个原因,我必须使用以下代码。

代码语言:javascript
复制
public int? Size
    {
        get
        {
            return this.size;
        }
        set
        {
            if (value == this.Size)
            {
                return;
            }
            this.size = value;
            this.OnPropertyChanged("StrVal");
        }
    }

请告诉我这是否是处理这个问题的理想方法。你好,阿尼尔班

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-09 00:30:46

是的,这是IDataErrorInfo的工作方式,它只会在发生属性更改通知时查询验证错误。因此,理想情况下,您的Size属性应如下所示:

代码语言:javascript
复制
public int? Size
{
    get
    {
        return this.size;
    }
    set
    {
        if (value == this.Size)
        {
            return;
        }
        this.size = value;
        this.OnPropertyChanged("Size");
        this.OnPropertyChanged("StrVal");
    }
}

即使您可能没有对size属性进行任何验证,您仍然应该(作为“最佳实践”)发送属性更改通知。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14777010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档