2016-08-02 2 views
0

MVVM 응용 프로그램에서 일반 WPF Calendar (System.Windows.Controls.Calendar)를 사용하고 있습니다. 캘린더는 한 번에 한 달을 보여 주며, 사용자는 하루를 선택합니다. 캘린더는 다음 달의 며칠을 맨 아래에 표시합니다. 괜찮습니다.캘린더 데이터 바인딩이 잘못된 날짜를 선택했습니다.

문제는입니다 나는 다음 달에서 날짜를 선택하면 (예를 들어, 다음 달 2) 다음 데이터는이 날짜와 바인딩 첫 번째 업데이트를 달력, 다음, 즉시의 1로 다시 업데이트 달!

내가 선택한 다음 달의 모든 날짜에 해당됩니다.

캘린더의 SelectedDate 및 DisplayDate 속성은 뷰 모델의 Date 속성에 바인딩 된 데이터입니다.

<Calendar SelectedDate="{Binding Date}" DisplayDate="{Binding Date}" /> 

뷰 모델은 이런 일이 왜 이해가 안이

public class CalendarProblemDemoViewModel : INotifyPropertyChanged 
{ 
    private DateTime _date; 

    public CalendarProblemDemoViewModel() 
    { 
     _date = DateTime.Today; 
    } 

    public DateTime Date 
    { 
     get { return _date; } 
     set 
     { 
      _date = value; 
      Debug.Write($"new date {_date}\n"); 
      OnPropertyChanged(nameof(Date)); 
     } 
    } 
    // Note: other code omitted, see the github project 
} 

처럼 보인다?

+1

그래서 둘 다 같은 속성 인 '날짜'에 바인딩되었습니다. 'SelectedDate'가'DisplayDate'와 다른가요? –

+1

실제로 LOL 문제를 해결합니다! 따라서 Calendar의 내부 동작과 관련이 있습니까? 디스어셈블러를 해고하고 봐야 겠어. – Grubl3r

+0

우리가 도울 수있어서 기쁘다. –

답변

1

SelectedDateDisplayDate을 동일한 속성 Date에 바인딩하지 마십시오.

+0

이것은 정답이지만, 나는 이것이 왜 진짜인지 이해하지 못한다. – Grubl3r

+1

현재 날짜를 '표시'하지만 그레이는 다른 날짜를'선택 '할 수 있습니다. 따라서 두 속성을 동일한 속성에 바인딩하면 Selected가 다른 경우에도 항상 속성이 표시됩니다. –

+1

둘 다 유지할 수 있습니다 :'DisplayDate = "{Binding SelectedDate, Mode = OneTime, UpdateSourceTrigger = PropertyChanged}"SelectedDate = "{SelectedDate, Mode = TwoWay, UpdateSourceTrigger = PropertyChanged}" –

관련 문제