2013-03-13 3 views
0

내가 소스를 변경했을 때 View의 변경 사항을 반영하려면 어떻게해야합니까? 여기 내 코드가있다. 모델 :MVVM NotifyPropertyChanged

public class ExecutionMode 
{ 
    private List<DayItem> _dayItems = new List<DayItem>(); 

    public enum TypeMode 
    { 
     None, 
     Once, 
     Daily, 
     Weekly 
    } 

    public TypeMode Mode { get; set; } 
    public DateTime? ExecutionTime { get; set; } 
    public DateTime? ExecutionDate { get; set; } 
    public List<DayItem> DayItems { get { return _dayItems; } set { _dayItems = value; } } 
} 
public class ProfileRecord 
    { 
     private ExecutionMode _mode = new ExecutionMode(); 
     public ExecutionMode ExecutionMode { get { return _mode; } set { _mode = value; } } 
    } 

뷰 모델

public class NewProfileViewModel : INotifyPropertyChanged 
    {private ProfileRecord _record = new ProfileRecord(); 
public ProfileRecord Record { get{return _record; } set{_record=value; OnPropertyChanged("Record")}} 

XAML : 나는 = 시간이보기에 반영되지 않습니다 코드 Record.ExecutionTime 어딘가에 설정

<toolkit:TimePicker Header="Time of execution:" Margin="12,0,70,0" Value="{Binding ProfileRecord.ExecutionMode.ExecutionTime, Mode=TwoWay}" Visibility="{Binding ElementName=lpickerExecutionModes, Path=SelectedItem, Converter={StaticResource VisibilityConvert}, ConverterParameter=Once|Daily|Weekly}" /> 

. 그래서 나는 묻고있다. 모델에 NotifyPropertyChanged도 구현해야합니까? 감사

답변

1

문제 해결의 2 가지 방법이 있습니다 :

  1. ViewModel 내 모델 클래스에 속성으로 모델 객체에서 필요한 모든 속성

  2. 지도 INotifyPropertyChanged을 구현하고 그에 INotifyPropertyChanged 구현은 속성.

특히 모델이 실제로 거대하고 속성이 많으며 모든 속성이보기에서 사용되는 경우 첫 번째 방법을 선호합니다.

+0

그래서 ProfileRecord 클래스에서 INotifyPropertyChanged를 구현하고 공용 ExecutionMode ExecutionMode {get {return _mode; } set {_mode = value; }}? 권리? – JuP

+0

'View'에서 바인드 할 수있는 모든 속성에 대해 실제로 어떤 클래스에 속해 있는지에 관계없이'INotifyPropertyChanged'를 구현해야합니다. – MarcinJuraszek

+0

@JurajP : 예, 붙여 넣기 한 ExMode {get; set}의 실제 구현은 실제로 setter에 raise-INPC 알림을 포함해야합니다. – quetzalcoatl

관련 문제