2011-06-13 3 views
1

MVVM 스타일 아키텍처를 사용하여 데이터 바인딩을 처리하려는 응용 프로그램을 작성하고 있습니다 (MVVM 특정 라이브러리 (예 : MVVM Light). 내 응용 프로그램에 필요한 모든 정보를 저장하는 클래스가 있고 각 스크린에 DataContext에 대한 뷰 모델이 지정됩니다.이 모델은 특정 화면에 필요한 값을 선택하기 만하면 필요한 경우 데이터 서식을 지정합니다. 이다,Silverlight/WP7 응용 프로그램에서 MVVM 스타일 패턴 사용

class MainScreenViewModel { 
    public int data1 { get { return App.DataStore.a * App.DataStore.c } } 
    public int data2 { get { return App.DataStore.e.Day } } 
} 
같은 것을

class DataStore { 
    int a, b, c; 
    string d; 
    DateTime e; 
} 

그리고 속성 만의 여러 사용하는 특정 화면에 할당 된 다음 뷰 모델 : 예를 들어

는 주요 데이터 저장소는 다음과 같이 보입니다

페이지가 데이터 바인딩을로드 할 때 제대로 채워지는 것처럼 제대로 작동하는 것 같습니다. 그러나 페이지가로드 될 때 자동으로 업데이트되지 않습니다. DataStore에 INotifyPropertyChanged를 구현했지만 변경 이벤트가 뷰 모델에 반영되도록 거품이없는 것으로 보입니다. 저는 이것이 정말 나쁜 길로 가고 있다는 것을 확신합니다. 누군가가 올바른 방향으로 나를 가르켜 줄 수 있다면, 나는 매우 감사 할 것입니다. 온라인 가이드를 읽었지만 점점 더 혼란스럽게 보입니다!

답변

5

INotifyPropertyChanged을 구현하고 PropertyChanged을 VM에 올려야합니다. 이를 위해서는 DataStore.PropertyChanged을 청취해야합니다. 샘플 :

class MainScreenViewModel { 
    public int data1 { get { return App.DataStore.a * App.DataStore.c } } 
    public int data2 { get { return App.DataStore.e.Day } } 


    public MainScreenViewModel() 
    { 
     App.DataStore.PropertyChanged += (sender, e) => 
       { 
        if (e.PropertyName == "a" || e.PropertyName == "c") 
         RaisePropertyChanged("data1"); 
        if (e.PropertyName == "e") 
         RaisePropertyChanged("data2"); 
       }; 
    } 

    private void RaisePropertyChanged(string propertyName) 
    { 
     // raise it 
    } 
} 

여기에 포함되지 유일한 부분은 e.DayDataStore으로 변경됩니다 시나리오입니다.

접근 방법 자체가 나쁘지는 않으며 시작하기에 충분합니다.

+0

감사합니다. 그 일은 내가하고 싶은 것처럼 보입니다. // RaisePropertyChanged에서 그것을 올리는 것은 무엇을 의미합니까? –

+0

, 감사합니다. –

+0

@Jordan,'raise it'는'raise PropertyChanged'를 의미합니다. 나는 그것을 완전히 타이핑하기에는 너무 게으르다. :) – Snowbear

0

MainScreenViewModel 클래스에 바인딩되어 있으므로 기본 데이터가 업데이트 될 때 UI가 업데이트되도록 INotifyPropertyChanged을 구현해야하는 클래스입니다.

당신은 MainScreenViewModel에 논리를 이동하고이 속성 변경 통지를 제기하거나 MainScreenViewModelDataStorePropertyChanged 이벤트를 처리하고 재산 해당 속성에 대한 통지를 변경 올릴 수 중 하나.

관련 문제