2012-11-12 2 views
1
후 컨트롤을 업데이트

I했습니다 스택의 기존 답변을 확인하고 여전히 얻을 수없는이 올바른 :는에서 INotifyPropertyChanged

내보기에

:

class YearsToSaveViewModel : INotifyPropertyChanged 
{ 
    private int yearsToSave; 
    public event PropertyChangedEventHandler PropertyChanged; 

    public YearsToSaveViewModel() 
    { 
     Questions = new SavingsCalculatorQuestions(); 
     YearsToSave = 5; //Binds correctly 
     YearsToSaveMinValue = 0; 
     YearsToSaveMaxValue = 30; 
    } 

    public SavingsCalculatorQuestions Questions { get; set; } 

    public int YearsToSaveMinValue { get; private set; } 

    public int YearsToSaveMaxValue { get; private set; } 

    public int YearsToSave 
    { 
     get { return yearsToSave; } 
     set 
     { 
      yearsToSave = value; 
      OnPropertyChanged("YearsToSave"); 
     } 
    } 

    public void Reset() 
    { 
     YearsToSave = 0; 
    } 

    protected void OnPropertyChanged(string name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      switch (name) 
      { 
       case "YearsToSave": 
        Questions.NumberOfYears = YearsToSave; 
        break; 
      } 
     } 
    } 
} 
: 내보기 모델에서

<TextBlock Margin="8,0,0,0" 

         FontSize="48" 
         Text="{Binding YearsToSave}" 
         d:LayoutOverrides="Width"> 
... 
    <SurfaceControls:SurfaceSlider x:Name="slider" Grid.Row="8" 
           Grid.Column="2" 
           VerticalAlignment="Bottom" 
           Maximum="{Binding YearsToSaveMaxValue}" 
           Minimum="{Binding YearsToSaveMinValue}" 
           Value="{Binding YearsToSave}" 
           d:LayoutOverrides="Width" /> 

속성 변경 이벤트가 올바르게 발생하고 값을 가져오고 Questions.NumberOfYears가 올바르게 업데이트되지만 변경 내용이 다시 뷰로 전파되지 않습니다. 그래서 같은

+0

확실히하고 곤란하게 올바른. –

답변

2

귀하의 OnPropertyChanged 방법은 PropertyChanged 이벤트를 발생하지 않습니다 ...

업데이트 당신의 방법

protected void OnPropertyChanged(string name) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler != null) 
    { 
     switch (name) 
     { 
      case "YearsToSave": 
       Questions.NumberOfYears = YearsToSave; 
       handler(this, new PropertyChangedEventArgs(name)); 
       break; 
     } 
    } 
} 
+0

처리기 (this, 새 PropertyChangedEventArgs (name)); ? –

+0

잘 찾아 냈습니다. 이것을 지적 해 주셔서 감사합니다. 이제 코드가 수정되었습니다. –

2

또 다른 옵션은 NotifyPropertyWeaver 프로젝트를 사용하고 있습니다!

내가 좋아하는 이벤트는 자동으로 이벤트를 호출하기 때문에!

참조 (마술하지만 편리의 비트) http://crosscuttingconcerns.com/NotifyPropertyWeaver

+0

이 특정 프로젝트는 더 이상 적극적으로 개발되지 않습니다.이 기능은 Fody 프레임 워크 용 플러그인으로 전환되었습니다. –

관련 문제