Silverlight 4.0 RIA、Silverlight 4、实体状态和复杂类型
我有一个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用户 { 。。。 }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
我假设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;
}
}