我有一个带域名服务的Silverlight应用程序。
实体对象(部分):
[EdmEntityTypeAttribute(NamespaceName="MiaoulisModel", Name="AbroadTravel")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class AbroadTravel : EntityObject
{
/// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[DataMemberAttribute()]
public global::System.String Description
{
get
{
return _Description;
}
set
{
OnDescriptionChanging(value);
ReportPropertyChanging("Description");
_Description = StructuralObject.SetValidValue(value, true);
ReportPropertyChanged("Description");
OnDescriptionChanged();
}
}
private global::System.String _Description;
partial void OnDescriptionChanging(global::System.String value);
partial void OnDescriptionChanged();
这是我的自定义属性的部分Classe:
public partial class AbroadTravel : INotifyPropertyChanged
{
[DataMember]
public String ShortDescription
{
get
{
if (this.Description == null)
{
return this.Description;
}
if (this.Description.Contains("\n"))
{
var index = this.Description.IndexOf("\n");
if (index < 50)
{
return this.Description.Substring(0, index) + " [...]";
}
}
if (this.Description.Length >= 50)
{
return this.Description.Substring(0, 50) + " [...]";
}
return this.Description;
}
}
}
在我的DataGrid中,我有:
<c1:Column x:Name="dgcDescription" Binding="{Binding Path=ShortDescription}" Width="4*" />
还有一个RichTextBox:
<c1:C1RichTextBox Text="{Binding Path=Description, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
当我更新描述值的RichTextBox时,带有ShortDescription的DataGrid不会更新。
任何想法? (我不使用MVVM,我使用Code Behind)
答案 0 :(得分:1)
当您更改属性ShortDescription
时,您需要告知UI属性Description
(自动计算的属性)已更改。
为了做到这一点,您需要在属性PropertyChanged
发生更改时为属性ShortDescription
引发Description
- 事件。否则,UI现在有机会知道属性ShortDescription
已更改,并且应该更新绑定。
在CodeBehind(Silverlight-Client-Project 中的),您可以这样做:
public partial class AbroadTravel
// omitted your code
partial void OnDescriptionChanged(){
RaisePropertyChanged("ShortDescription");
}
}