簡體   English   中英

DisplayAttribute名稱屬性在Silverlight中不起作用

[英]DisplayAttribute name property not working in Silverlight

我將DataGrid.ItemsSource屬性綁定到List<PersonDetails>對象。 我通過支持Silverlight的WCF服務獲取數據。 所以PersonDetails類在Web Project中實現。 如果類位於Silverlight項目中,則每個DataGrid的標題文本都會根據需要進行更改。 但是我不能在Web服務中使用這個類。 唯一的解決方案是將相同的類添加到兩個項目中。 但是,還有其他方法嗎?

這個類看起來像這樣:

[DataContract]
public class PersonGeneralDetails
{
    // Properties

    [DataMember]
    [DisplayAttribute(Name = "Sira")]
    public int RowNumber { get; set; }

    [DataMember]
    [DisplayAttribute(Name = "Seriyasi")]
    public string SerialNumber { get; set; }
}

似乎在Web項目中不生成屬性。 我知道我可以使用DataGrid事件更改標題文本。 但我想使用屬性使其工作。

問題是WCF DataContract是一種可互操作的機制,可以跨語言和平台使用。

如果您查看由DataContractSerializer (或其在System.Runtime.Serialization.dll代碼,特別是InternalWriteObjectXyz()方法)生成的序列化數據,您將看到它只是將值序列化為簡單的XML消息。 沒有任何與.NET Framework相關的內容,因此所有類型的屬性(包括自定義和編譯器生成的)都將被剝離,甚至不會被客戶端接收。

它可以創建數據副本並將它們從服務器發送到客戶端,然后客戶端將創建一個具有相同簽名新類 注意:具有相同簽名的新CLASS不僅僅是原始類的新對象

當然,有一些解決方法。 您可以編寫自己的序列化程序 (請參閱SO上的這篇文章作為示例)或您自己的ISerializationSurrogate

如果你可以將你的程序集部署/共享給你的客戶端你有一個很好的解決方法:只需部署它們, DataContractSerializer將在你的客戶端上構建正確的對象(與服務器上的對象完全相同,具有所有屬性)。 請記住:

  • 如果自定義屬性來自運行時值(例如由於本地化),那么它們將在客戶端而不是服務器上解析(因為將在客戶端上創建屬性,它們的值將不包含在XML中信息)。
  • 在客戶端應用程序中,您需要添加對包含類型的程序集的引用。
  • 添加服務引用時,必須指示VS使用它們(或者它將創建代理),在“ 服務引用設置”對話框中選擇“ 引用程序集中的重用類型” (您可以將此限制為僅要共享的程序集)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM