2

私のすべてのエンティティには、次のプロパティがあります。

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

これは非常に大規模なアプリケーション用であり、エンティティはすべて異なるデータベースから取得されるため、異なる.edmxファイルにあります。

ほとんどの場合、これらはに表示されDataGridます。ツールチップにそのすべての情報を表示させたいと思います。 Employeeすべてのデータベースにあるビューです。

私が通常行うことは、各名前空間IEmployeeEmployeeエンティティが実装するインターフェイスを作成することです。次にIToolTipEnabled、上記のプロパティを使用してインターフェイスを作成し、必要に応じて実装します。

そうすれば、ツールチップのコンテンツにSilverlight側の単一のコンバーターを使用できるようになります。現状では、キャストを正しく行うために、基本的にエンティティタイプごとに新しいコンバーターを作成する必要があります。

これを行う良い方法はありますか?

これを読むために時間を割いてくれてありがとう、そしてあなたが提供できるかもしれないどんな助け/洞察にも感謝します!

編集:ken2kのソリューションは間違いなく正しいものです。インターフェイスを「.shared.cs」ファイルに配置し、同じ共有ファイル(または別の共有ファイル)にインターフェイスを実装するクラスの部分的なクラス定義を配置するだけです。必要なのはそれだけです。

4

1 に答える 1

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();
    }
}
于 2012-08-09T17:10:54.947 に答える