首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RIA、Silverlight4、EntityStates和复杂类型

RIA、Silverlight4、EntityStates和复杂类型
EN

Stack Overflow用户
提问于 2009-12-14 21:43:06
回答 1查看 1.3K关注 0票数 1

我有一个RIA Silverlight4应用程序,它有一个复杂的数据类型作为模型。作为一个熟悉的示例,让我们将其命名为aspnet_User,它有一个名为aspnet_Membership的成员对象;aspnet_User有一个名为"UserName“的成员,aspnet_Membership有一个名为"Email”的成员。现在使用aspnet_User作为数据上下文,我想绑定到aspnet_User或附加的aspnet_Membership中的任何更改-也就是说,我想显示aspnet_User是否“脏”。如果我更改了aspnet_User.UserName或aspnet_Membership.Email,脏标志应该会显示。现在之前我已经实现了一个转换器并绑定到对象上的EntityState,这可以很好地显示简单属性是否是脏的,但当编辑aspnet_Membership成员的各个方面时,EntityState不会改变。

我尝试实现了一个名为BubbledEntityState的属性,它反映了aspnet_User或aspnet_membership上修改后的EntityState。它是在Silverlight项目的分部类中定义的。这需要对aspnet_User或其成员aspnet_Membership上的EntityState PropertyChanged事件做出反应。因此,我尝试在部分OnCreated方法中处理这些事件。然而,奇怪的是,它根本没有被调用。下面是该方法:公共分部类aspnet_User {

代码语言:javascript
运行
复制
    partial void OnCreated()
    {
        this.aspnet_Membership.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(aspnet_Membership_PropertyChanged);
        this.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(aspnet_User_PropertyChanged);
    }

... }

我假设aspnet_User对象是在服务器上构造的,当它们在RIA完成WCF调用后在客户机上重新构造时,它们不会被“重构”。这让我觉得很奇怪。我是不是做了什么怪事?有没有人有更好的办法来解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-14 22:02:37

好的,我已经把它弄好了。这看起来仍然有点复杂,但我没有使用OnCreated partial方法,而是重载了OnLoaded方法:

代码语言:javascript
运行
复制
protected override void OnLoaded(bool isInitialLoad)
        {
            base.OnLoaded(isInitialLoad);
            this.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(aspnet_User_PropertyChanged);
        }

    partial void OnCreated()
    {

    }

    void aspnet_User_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "aspnet_Membership")
        {
            if (this.aspnet_Membership != null)
            {
                this.aspnet_Membership.PropertyChanged+=new System.ComponentModel.PropertyChangedEventHandler(aspnet_Membership_PropertyChanged);
            }
        }
        if (e.PropertyName == "EntityState")
            this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("BubbledEntityState"));
    }

    void aspnet_Membership_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "EntityState")
            this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("BubbledEntityState"));
    }

    public EntityState BubbledEntityState
    {
        get
        {
            if (this.EntityState== System.Windows.Ria.EntityState.Unmodified)
            {
                if (this.aspnet_Membership==null)
                    return System.Windows.Ria.EntityState.Unmodified;
                if (this.aspnet_Membership.EntityState== System.Windows.Ria.EntityState.Modified)
                    return System.Windows.Ria.EntityState.Modified;
                return System.Windows.Ria.EntityState.Unmodified;
            }
            return this.EntityState;
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1900993

复制
相关文章

相似问题

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