この投稿の質問の中心は、いずれかのDPのプロパティコールバックが設定されるまでに、すべてのDPが設定されることを期待できるかどうかです。これは私が見ている行動ではないので、私はこれを尋ねます。
クラスには2つのDPがあり、どちらもXAMLで設定されています。
<!-- Days of the Week -->
<local:DayOfTheWeekColumn
DowIndex="0"
ActivityCollection="{Binding Source={StaticResource spy}, Path=DataContext}"
....
/>
DayOfTheWeekColumnクラスでは、DPは今のところ次のように宣言されています。
public static readonly DependencyProperty DowIndexProperty = DependencyProperty.RegisterAttached(
"DowIndex", typeof(string), typeof(DayOfTheWeekColumn),
new PropertyMetadata(OnDowIndexSet), IsIndexValid);
public static readonly DependencyProperty ActivityCollectionProperty = DependencyProperty.RegisterAttached(
"ActivityCollection", typeof(IActivityCollectionViewModelBase), typeof(DayOfTheWeekColumn),
new PropertyMetadata(OnActivityCollectionSet));
OnDowIndexSetコールバックが実行されると、ActivityCollectionPropertyはnullのままですが、OnActivityCollectionSetコールバックが実行されると、DowIndexPropertyが評価されます。このユースケースを実現するには、両方のプロパティが必要です。OnActivityCollectionSetは次のとおりです。
private static void OnActivityCollectionSet(DependencyObject target, DependencyPropertyChangedEventArgs e) {
var context = (IActivityCollectionViewModelBase) e.NewValue;
var col = (DayOfTheWeekColumn) target;
var index = Convert.ToInt32(col.DowIndex);
_setHeader(col, context, index);
}
これで機能しますが、コールバックが実行されるまでに両方のプロパティを設定するタイミングがわからない限り、私には脆弱です。OnDowIndexSetではなくOnActivityCollectionSetで両方のプロパティを使用できるようにする必要があるのはなぜですか?
乾杯、
ベリール