2012-01-11 3 views
2

WP7 용 Silverlight에서 응용 프로그램을 개발 중입니다. MVVM 패턴을 사용하기로 결정했습니다. 나는 ViewModels를 찾는 ViewModelLocator 클래스를 배웠다. More in example :디자인 타임에 데이터가 표시되지 않습니다.

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에 바인딩하여 조정되며 Locator는 ViewModelLocator의 인스턴스입니다.

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

DataContext를 Instance.LocationDetail에 바인딩 할 때 디자인 타임에 뷰에 데이터 투영에 문제가 있습니다.

사소한 변경을 한 다음 SomeVM에만 DataContext를 설정하면 데이터가 표시됩니다.

Binging to Instance.SomeVM을 사용하면 디자인 타임에 데이터가 표시되지 않는 이유는 무엇입니까?

런타임에 모든 것이 정상적으로 작동합니다. 두 경우 모두.

답변

1

언제 인스턴스 속성을 초기화합니까?

'Locator'키를 사용하여 앱의 리소스에 ViewModelLocator의 인스턴스를 추가했다고 가정합니다.하지만이 경우에도 Instance는 할당되지 않았기 때문에 null로 유지됩니다.

당신이 할 경우

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

당신은 재산 인스턴스에서 SomeVM의 값을 취득하려고합니다.

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;           
    } 
} 
을하지만 인스턴스

이 작동합니다 ... 아마 널

관련 문제