2016-08-02 9 views
0

MVVMアプリケーションで通常のWPFカレンダー(System.Windows.Controls.Calendar)を使用しています。カレンダーは一度に1カ月表示され、ユーザーは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の問題を解決します!だからカレンダーの内部の仕組みと関係がありますか?私は逆アセンブラを起動して見ていると思う。 – Grubl3r

+0

私たちが助けてくれてうれしいです:) –

答えて

1

SelectedDateDisplayDateの両方を同じプロパティDateにバインドしないでください。

+0

これは正解ですが、なぜそれが本当に理解できませんか? – Grubl3r

+1

現在の日付(灰色ではない)を「表示」しますが、異なる日付(灰色)を「選択」することができます。したがって、両方を同じプロパティにバインドすると、Selectedが異なる場合でも常にプロパティが表示されます。 –

+1

これを行うと、両方を保つことができます: 'DisplayDate =" {SelectedDate、Mode = OneTime、UpdateSourceTrigger = PropertyChanged}をバインドしました "SelectedDate =" {SelectedDate、Mode = TwoWay、UpdateSourceTrigger = PropertyChangedのバインド} " –

関連する問題