【问题标题】:RIA, Silverlight 4, EntityStates and Complex TypesRIA、Silverlight 4、EntityStates 和复杂类型
【发布时间】:2009-12-14 13:43:05
【问题描述】:

我有一个以复杂数据类型作为模型的 RIA silverlight 4 应用程序。作为一个熟悉的例子,我们称它为 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 {

    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 调用后在客户端上重构它们时不会“重构”。这让我觉得很奇怪。我在做一些古怪的事情吗?有谁有更好的方法来解决这个问题?

【问题讨论】:

    标签: silverlight-4.0 ria


    【解决方案1】:

    好的,我已经完成了这项工作。它看起来仍然有点复杂,但我没有使用 OnCreated 部分方法,而是重载了 OnLoaded 方法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多