2013-07-09 2 views
0

MVVM Light Toolkit을 사용하여 WPF에서 간단한 응용 프로그램을 개발 중입니다. 나는 두 가지보기가 있습니다MVVM에서 WebService 호출

  • HomeView (기본값)
  • CustomersView을

이것은 MainViewModel 클래스의 일부입니다

CustomerViewModel에서
public MainViewModel() 
    { 
     CurrentViewModel = Bootstrapper.Instance.Container.Resolve<HomeViewModel>(); 
    } 

    private void ExecuteShowCustomersCommand() 
    { 
     CurrentViewModel = Bootstrapper.Instance.Container.Resolve<CustomersViewModel>(); 
    } 

내가 가진 재산 :

public ObservableCollection<Customers> Customers 
    { 
     get { return _customers; } 
     set 
     { 
      if (_customers == value) return; 
      _customers = value; 
      RaisePropertyChanged(CustomersPropertyName); 
     } 
    } 

그리고 내 질문은 언제 고객 데이터를 얻기 위해 웹 서비스를 호출해야합니까? CustomerViewModel 생성자에서?

+0

를 시작합니다. 논리를 생성자에 넣으면 안됩니다. –

+0

논리를 생성자에 넣지 않아야하는 이유는 무엇입니까? – raki

+0

생성자는 매개 변수를 받아들이고 객체를 생성하는 매우 간단한 메소드입니다. 최소한의 로직을 갖는 것이 좋습니다. 프레임 워크 디자인 지침을 참조 할 수 있습니다. http://msdn.microsoft.com/en-us/library/ms229060.aspx –

답변

0

나는 viewmodel의 생성자에서이를 수행하고 IoC 컨테이너를 사용하여 인스턴스를 가져온다.

응용 프로그램

SimpleIoc.Default.Register<IDataService, DataService>(); 
SimpleIoc.Default.Register<MyViewModel>(); 

뷰 모델

public MyViewModel(IDataService DataService) 
{ 
    Mydata = DataService.GetData(); // Edit: Could also be done in a property with lazy load 
} 

로케이터에게 _customers가 null의 경우 우리가 첫 번째 통화에서 고객의 게터에 비동기 서비스 호출을 넣어 우리의 응용 프로그램에서

public MyViewModel MyVM 
{ 
    get 
    { 
     return SimpleIoc.Default.GetInstance<MyViewModel>(); 
    } 
}