2012-01-11 6 views
2

WP7のSilverlightでアプリケーションを開発中です。私はMVVMパターンを使用することに決めました。私はViewModelsを見つけるViewModelLocatorクラスを持っています。例のその他:デザイン時にデータが表示されない

public sealed class ViewModelLocator 
{ 

    private static ViewModelLocator _instance = null;   
    public static ViewModelLocator Instance 
    { 
     get 
     { 
      return _instance; 
     } 
     set 
     { 
      _instance = value;           
     } 
    } 

    public SomeViewModel SomeVM 
    { 
     get 
     { 
       ........ 
     } 
    } 
........ 
} 

のDataContextをInstance.SomeVMに結合することによって調整され、ロケータViewModelLocatorのインスタンスです。

DataContext="{Binding Instance.SomeVM, Source={StaticResource Locator}}" 

DataContextをInstance.LocationDetailにバインドするときにデザイン時にビューにデータが投影される問題があります。

マイナーな変更を加えた後、DataContextをSomeVMだけに設定すると、データが表示されます。

Bing to Instance.SomeVMを使用すると、デザイン時にデータが表示されないのはなぜですか?

ランタイムですべて正常に動作します。両方の場合において。

答えて

1

いつインスタンスプロパティを初期化しますか?

私はあなたのアプリのリソースに 'Locator'というキーを使ってViewModelLocatorのインスタンスを追加したと仮定しますが、このようにしてもインスタンスのプロパティは決して割り当てられていないのでヌルのままです。

あなたがない場合:

DataContext="{Binding Instance.SomeVM, Source={StaticResource Locator}}" 

あなたは、プロパティのインスタンスからSomeVMの値を取得しよう。しかし、インスタンスは、おそらくnullです...

これは動作するはずです:

DataContext="{Binding SomeVM, Source={StaticResource Locator}}" 

そして、あなたはシングルトンパターンをしたい場合、あなたはあなたのインスタンスのプロパティを初期化を検討する必要があります。

private static ViewModelLocator _instance = null;   
public static ViewModelLocator Instance 
{ 
    get 
    { 
     if(_instance == null) 
      _instance = new ViewModelLocator(); 
     return _instance; 
    } 
    set 
    { 
     _instance = value;           
    } 
} 
関連する問題