2012-08-09 67 views
2

我所有的實體將具有以下屬性:替代界面W/RIA服務

Employee CreatedBy { get; set; } 
Employee ModifiedBy { get; set; } 
DateTime CreatedDate { get; set; } 
DateTime ModifiedDate { get; set; } 

這是一個非常大的應用程序和實體都在從不同的數據庫拉出,因此,在不同的.edmx文件。

大多數情況下,這些將顯示在DataGrid,我希望有一個工具提示顯示所有這些信息。 Employee是每個數據庫中的視圖。

我通常會這樣做,將創建一個接口IEmployee即每個名稱空間的Employee實體將實現。然後,我會創建一個IToolTipEnabled接口與上面列出的屬性,我會實現,無論需要。

然後,我將能夠在Silverlight端使用單個轉換器來獲取工具提示內容。事實上,我必須基本上爲每個實體類型創建一個新的轉換器,以便演繹正確。

有沒有一種很好的方法來做到這一點?

感謝您花時間閱讀本文,並感謝您能夠提供的任何幫助/見解!

編輯:ken2k的解決方案肯定是正確的,只需將接口的」 .shared.cs'文件,並在同一個共享文件(或其他共享文件),把類的部分類定義實現界面。這就是所需要的。

回答

2

如果您的某些實體共享公共屬性,並且您需要獲取這些屬性而不必知道實體的類型,那麼接口確實是一個好主意。

例如:

public interface IDatedEntity 
{ 
    DateTime CreationDate { get; set; } 
    DateTime UpdateDate { get; set; } 
} 

public partial class User : IDatedEntity 
{ 
    public DateTime CreationDate { get; set; } 
    public DateTime UpdateDate { get; set; } 
    ... 
} 
... 
public partial class Customer : IDatedEntity 
{ 
    public DateTime CreationDate { get; set; } 
    public DateTime UpdateDate { get; set; } 
    ... 
} 

所以,你可以使用一個轉換器,而無需知道實際的實體:

// Returns the number of days since last update of an entity 
public class DateConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    {  
     if (value is IDatedEntity) 
     { 
      return DateTime.UtcNow.Substract(((IDatedEntity)value).UpdateDate).TotalDays; 
     } 

     return 0; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

但可以用RIA服務這項工作?我不斷收到錯誤,然後我發現:http://forums.silverlight.net/t/173718.aspx/1這似乎說這是不可能的... – nosirrahcd 2012-08-09 18:34:54

+1

@ user468341嘗試保存您的部分類(實現你的界面)放在名爲XXX.shared.cs的文件中(例如上面例子中的User.shared.cs)。 RIA服務使用此模式自動將C#代碼從服務器端共享到客戶端(代碼複製到客戶端代理中)。 – ken2k 2012-08-09 21:11:58

+0

@ ken2k如果你這樣做,它幾乎可以工作;它似乎沒有通過電線將屬性發送回服務器端。我接近完成這項工作。 – DaleyKD 2012-08-21 15:01:26