这篇文章中问题的核心是您是否可以期望在设置其中一个的属性回调时设置所有 DP。我问这个是因为这不是我看到的行为。
一个类有两个 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);
}
现在这可行,但只要我不了解在回调执行时设置这两个属性的时间,它对我来说很脆弱。为什么这两个属性都可以用于 OnActivityCollectionSet 而不是 OnDowIndexSet?
干杯,
贝里尔