本文的核心问题是,在为其中一个dp设置属性回调时,是否可以期望设置所有dp。我问这个是因为这不是我看到的行为。
<!-- Days of the Week -->
<local:DayOfTheWeekColumn
DowIndex="0"
ActivityCollection="{Binding Source={StaticResource spy}, Path=DataContext}"
....
/>
在DayOfWeekColumn类中,DPs的声明如下:
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?
贝里尔