自定义实体对象属性不会在Silverlight DataGrid中更新

时间:2012-10-04 08:01:09

标签: wcf silverlight binding c1richtextbox

我有一个带域名服务的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)

1 个答案:

答案 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");
  }
}