本文中问题的核心是,您是否可以预期在设置其中一个的属性回调时设置所有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?
干杯,
Berryl
答案 0 :(得分:1)
也许在XAML中的ActivityCollection之前设置DowIndex之前?
你不能使用默认的DependencyProperty值来防止这个问题吗?
小OT提示:Path绑定属性是默认值,因此您可以使用这个较短的表示法:
ActivityCollection="{Binding DataContext, Source={StaticResource spy}}"