1

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

干杯,
贝里尔

4

1 回答 1

1

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

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

小 OT 提示:Path 绑定属性是默认属性,因此您可以使用以下较短的符号:

ActivityCollection="{Binding DataContext, Source={StaticResource spy}}"
于 2010-08-06T20:11:03.150 回答