1

この投稿の質問の中心は、いずれかのDPのプロパティコールバックが設定されるまでに、すべてのDPが設定されることを期待できるかどうかです。これは私が見ている行動ではないので、私はこれを尋ねます。

クラスには2つの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);
    }

これで機能しますが、コールバックが実行されるまでに両方のプロパティを設定するタイミングがわからない限り、私には脆弱です。OnDowIndexSetではなくOnActivityCollectionSetで両方のプロパティを使用できるようにする必要があるのはなぜですか?

乾杯、
ベリール

4

1 に答える 1

1

DowIndex が XAML の ActivityCollection の前に設定される前でしょうか?

この問題を防ぐために、デフォルトの DependencyProperty 値を使用できませんでしたか?

そしてちょっとした OT のヒント: パス バインディング プロパティはデフォルトのものなので、この短い表記法を使用できます。

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