現在のアプリケーションには次の問題があります。(クラスの例は、Entity Framework Entity クラスとして理解する必要があります。)
さまざまなプロパティの Get/Set の例として、アプリケーション全体で使用されるいくつかのプロパティを保持する静的クラスがあると仮定します。
プロパティの Get は、このプロパティを要求するたびに呼び出されます。何らかのコントロールへのデータバインディングにより、これはおそらくコントロールの再描画 (レイアウトの更新) が発生するたびに発生します。
今、私は状況が発生する可能性があるという問題に直面しています.2つのウィンドウを異なる「静的」値で開きたいのですが、このシナリオを達成するための最良の方法は何ですか?
以下に、理解しやすくするためのいくつかのコードを示します。
クエリで使用されるプロパティを保持する静的クラス:
public static class Core
{
public string IdLang { get; set; }
public string IdCompany { get; set; }
}
プロパティ Name の get/set で Core.IdLang を使用するクラス:
public class Car
{
private string _name;
public string Name
{
get
{
_name = (from x in LanguageTables
where x.IdLang == Core.IdLang
select x.Text).FirstOrDefault();
return _name;
}
set
{
if (value == _name)
return;
var languageTable = (from x in LanguageTables
where x.IdLang == Core.IdLang
select x).FirstOrDefault();
if (languageTable == null)
{
languageTable = new LanguageTable();
languageTable.IdLang = Core.IdLang;
}
languageTable.Text = _name;
}
}
}
ここで、2 つの異なるウィンドウに 2 つの DataGrid があり、車のリストを 2 つの異なる言語でバインドしたいとします。
私は次のことを行っています(1つのグリッドとウィンドウの例のみ):
public class Window1 : Window
{
List<Car> Cars;
public Window1()
{
InitializeComponents();
Core.IdLang = "DE";
Cars = new List<Car>();
//fetch data from Database, and populate the List<Car>
Grid1.ItemsSource = from x in Cars
select x;
}
}
上記のコード (Window1) をコピーして貼り付けて、2 つ目のウィンドウを作成し、すべての車を英語の名前で表示したいので、次のコードを変更しました。
Core.IdLang = "DE";
に
Core.IdLang = "EN";
そして、すべてがうまくいくと思っていましたが、後で Core.IdLang を呼び出すどのウィンドウもこの値になり、いずれかのウィンドウで Get/Set が呼び出されると、この言語でのみ受信または変更され、ウィンドウ間で違いはありません。
実際のアプリケーションでは、Core クラスは約 6 つ (またはそれ以上) のプロパティで構成され、50 以上のクラスで使用されます。Car.Name サンプルで確認できるように、すべてのクラスに同じ get/set コードを持つプロパティが少なくとも 1 つあります。
これらのクラスはいずれも、比較のために英語とドイツ語のデータを並べて表示するシナリオで使用できます。