DependencyProperty依赖项和PropertyCallbacks

时间:2010-08-05 20:14:04

标签: wpf dependency-properties attached-properties

本文中问题的核心是,您是否可以预期在设置其中一个的属性回调时设置所有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

1 个答案:

答案 0 :(得分:1)

也许在XAML中的ActivityCollection之前设置DowIndex之前?

你不能使用默认的DependencyProperty值来防止这个问题吗?

小OT提示:Path绑定属性是默认值,因此您可以使用这个较短的表示法:

ActivityCollection="{Binding DataContext, Source={StaticResource spy}}"