Silverlight 4.0 RIA、Silverlight 4、实体状态和复杂类型

Silverlight 4.0 RIA、Silverlight 4、实体状态和复杂类型,silverlight-4.0,ria,Silverlight 4.0,Ria,我有一个RIA silverlight 4应用程序,以复杂的数据类型作为模型。作为一个熟悉的例子,让我们称之为aspnet_User,它有一个名为aspnet_Membership的成员对象;aspnet_用户有一个名为“用户名”的成员,aspnet_成员有一个名为“电子邮件”的成员。现在,使用aspnet_用户作为数据上下文,我想绑定到aspnet_用户或附加的aspnet_成员的任何更改,即我想显示aspnet_用户是否“脏”。如果我更改了aspnet_User.UserName或aspne

我有一个RIA silverlight 4应用程序,以复杂的数据类型作为模型。作为一个熟悉的例子,让我们称之为aspnet_User,它有一个名为aspnet_Membership的成员对象;aspnet_用户有一个名为“用户名”的成员,aspnet_成员有一个名为“电子邮件”的成员。现在,使用aspnet_用户作为数据上下文,我想绑定到aspnet_用户或附加的aspnet_成员的任何更改,即我想显示aspnet_用户是否“脏”。如果我更改了aspnet_User.UserName或aspnet_Membership.Email,则应该显示脏标志。现在,我已经实现了一个转换器并绑定到对象上的EntityState,这对于显示简单属性是否脏很好,但是在编辑aspnet_成员身份成员的方面时EntityState不会改变

我尝试实现一个名为BubbleEntityState的属性,该属性在aspnet_用户或aspnet_成员身份上反映修改后的EntityState。它是在Silverlight项目的分部类中定义的。这需要对aspnet_用户或其成员aspnet_成员身份上的EntityState PropertyChanged事件作出反应。所以我尝试用部分OnCreated方法处理这些事件。但奇怪的是,这根本没有被调用。方法如下: 公共部分类aspnet\u用户 {

。。。 }


我假设aspnet_用户对象是在服务器上构建的,并且在RIA完成WCF调用后在客户端上重构时不会“重构”。我觉得这很奇怪。我是不是在胡闹?有谁有更好的方法来处理这个问题吗?

好的,我已经让它工作了。它看起来仍然有点复杂,但我没有使用OnCreated partial方法,而是重载了onload方法:

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;
        }
    }

好的,我已经开始工作了。它看起来仍然有点复杂,但我没有使用OnCreated partial方法,而是重载了onload方法:

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;
        }
    }