私はWPFをよりよく理解するための簡単なカレンダーコントロールを作成しています。私は2つのボタン(次、prevoious)が含まれていCalendarHeader制御と子がプロパティ値を変更したときに親に通知する
public static DependencyProperty CurrentMonthProperty = DependencyProperty.Register
("CurrentMonth", typeof(int), typeof(CalendarHeader), new FrameworkPropertyMetadata(DateTime.Now.Month, FrameworkPropertyMetadataOptions.None, CurrentMonthChangedCallBack));
としてCalenderHeaderがCalendarMonthあると対話するので、必要な別の制御を定義した依存関係プロパティのCurrentMonthを持っています。 CalendarHeaderがCurrentMonthの値を変更した場合、月がCalendarHeaderに変更されたときCalendarMonthを知らせるために、私は
public static DependencyProperty CurrentMonthProperty = CalendarHeader.CurrentMonthProperty.AddOwner
(typeof(CalendarMonth), new FrameworkPropertyMetadata(DateTime.Now.Month, CurrentMonthChangedCallBack));
としてそれに所有者の依存関係プロパティを追加している、私はそれがまたCalendarMonthでCurrentMonthChangedCallBackを誘発するだろうと思ったが、そうではありませんそれをやって。 CalendarHeaderのCurrentMonthの値が変更されたことを、どのようにしてCalendarMonthに通知できますか? ありがとうございます
Mike、 それがうまくいくかどうかわかりません。まず、CalendarHeaderはCalendarMonth内にネストされます。 第2に、月を変更するボタンを持つCalendarHeaderです。ベースクラスから継承することは、値を変更している基本クラスではなく、CalendarHeaderであるため、多くのことを行いません。 – Sheraz
依存関係プロパティ継承により、親に設定された値がすべての子に適用されます(これがウィンドウの背景を設定すると、すべての子に対して背景が変更されます)。 ルーテッドイベントを使用すると、誰かが現在の月を変更したがっていることが親に通知されます。親がそうすると、すべての子どもが更新されます。 –
これは私が問題を解決したことです。あなたが定義したベースクラスを追加しました。 CalendarHeaderはCalendarMonthにネストされているので、継承でDependencyPropertyを使用することはできません。代わりに、私は基底クラスでRouted Eventを定義しました。ヘッダーでそのイベントを発生させました。 CalendarMonthのハンドラを登録しました。現在の月の値を取得し、e.Handled = trueに設定するには、送信者をCalendarHeaderにキャストしました。それはそれを働かせました。 ありがとう – Sheraz