2016-08-02 19 views
0

我在MVVM應用程序中使用常規的WPF日曆(System.Windows.Controls.Calendar)。日曆每次顯示一個月,用戶將選擇一天。日曆顯示下個月底部的幾天,這很好。日曆數據綁定選擇錯誤的日期

問題是如果我從下個月(例如下個月的第二天)選擇一個日期,那麼Calendar首先更新與此日期的數據綁定,然後立即用第一個月!

這種情況發生在我選擇的下個月的所有日期。

日曆的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

所以你將兩個都綁定到同一個屬性Date。你有沒有嘗試看看「SelectedDate」與「DisplayDate」不同? –

+1

這實際上解決了問題哈哈!所以它與日曆的內部工作有關?我想我會打開反彙編程序並看看。 – Grubl3r

+0

很高興我們能夠幫助:) –

回答

1

您不應該將SelectedDateDisplayDate都綁定到相同的屬性Date

+0

這是正確的答案,但我不明白爲什麼這是真的嗎? – Grubl3r

+1

它顯示當前的日期(不是灰色),但你可以選擇不同的日期(灰色)。因此,通過將兩者都綁定到相同的屬性,即使所選內容不同,該屬性也會始終顯示。 –

+1

如果你這樣做,你可以保留兩個:DisplayDate =「{綁定SelectedDate,模式=一次,UpdateSourceTrigger = PropertyChanged}」 SelectedDate =「{Binding SelectedDate,Mode = TwoWay,UpdateSourceTrigger = PropertyChanged}」' –