2011-01-26 3 views
0

特定のビューを最初に使用したときに読み込まれる汎用リストがあります。今私のプロジェクトのすべてのビューからこのリストにアクセスする必要があります。すべてのSilverlightビューでグローバル汎用リストにアクセスする必要があります

私は、AppクラスのPublicプロパティを使用して実験しています。問題は、他のクラス/ビューコード(App.Currentを試してみる)からそのプロパティにアクセスできないようです。

Appクラスで定義されているパブリックプロパティジェネリックリストにアクセスするにはどうすればよいですか?

これはVBにあります。

ありがとうございました。

答えて

1

私はこのようなことをするために見つけた最良の方法は静的なクラス( "グローバル"または "Config"などと呼ばれる)を作成し、あなたがしたいリストを含む静的プロパティを作成することです参照。

public static class Globals 
{ 
    public static List<Customer> AllCustomers {get; set; } 
} 

またはVB.NETで:だから、このようなものに見えるかもしれません

Private Shared m_AllCustomers as List(of Customer) 
Public Shared Property AllCustomers As List(of Customer) 
    Get 
     Return m_AllCustomers 
    End Get 
    Set(ByVal Value as List(of Customer)) 
     m_AllCustomers = Value 
    End Set 
End Property 

をそして、あなたはその後、設定/取得することができ、あなたがそれを必要な場所からプロパティ:

Globals.AllCustomers = new List<Customer>(); 

Or:

Globals.AllCustomers = New List(Of Customer) 

もちろん、グローバルこのようなものは一般的には素晴らしいアイデアではありませんが、時には最も簡単な解決策です。私の意見では、VB.NETモジュールではなくクラスに入れることも良い考えです。グローバルな名前空間に入れるのではなく、値に名前空間を追加するからです。これはモジュール性に少し役立ちます。

あなたはこのApp.Currentの財産作りを主張した場合、あなたはつまり、あなたが作成した実際のクラスにApp.Currentをキャストする必要があります。

var allCustomers = ((App)App.Current).AllCustomers; 

しかし、私は、一般的にこれらの種類のことを避けるため、プロパティをテストするのが難しくなり、Single Responsibilityのアイデアが壊れるため、Appクラスのプロパティを変更する必要があります。

+0

私はVBで静的クラスがVBに存在しないと思うので、単純なモジュールでこれを行うことができることに気づいた。しかし、あなたの答えは、私がこれ以上調べてくれました。 – mraviator

+0

私はVB.NETでクラスを静的にすることはできませんが、クラスメンバーは以下のように思います:しかし、キーワードは "静的ではなく" "共有"です。私は私の答えを更新します。 –

関連する問題