代码之家  ›  专栏  ›  技术社区  ›  Berryl

DependencyProperty依赖项和PropertyCallbacks

  •  1
  • Berryl  · 技术社区  · 16 年前

    本文的核心问题是,在为其中一个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?


    贝里尔

    1 回复  |  直到 16 年前
        1
  •  1
  •   Matěj Zábský    16 年前

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

    你不能用默认的dependencProperty值来阻止这个问题吗?

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