Wpf DependencyProperty依赖项和PropertyCallbacks

Wpf DependencyProperty依赖项和PropertyCallbacks,wpf,dependency-properties,attached-properties,Wpf,Dependency Properties,Attached Properties,这篇文章的核心问题是,在为其中一个DPs设置属性回调时,是否可以期望设置所有DPs。我这样问是因为这不是我看到的行为 一个类有两个DP,它们都在XAML中设置,如下所示: <!-- Days of the Week --> <local:DayOfTheWeekColumn DowIndex="0" ActivityCollection="{Binding Source={StaticResource spy}, Path=DataContext}"

这篇文章的核心问题是,在为其中一个DPs设置属性回调时,是否可以期望设置所有DPs。我这样问是因为这不是我看到的行为

一个类有两个DP,它们都在XAML中设置,如下所示:

<!-- Days of the Week -->
<local:DayOfTheWeekColumn 
    DowIndex="0" 
    ActivityCollection="{Binding Source={StaticResource spy}, Path=DataContext}"
    ....                    
/>
当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

可能在XAML中的ActivityCollection之前设置DowIndex之前

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

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

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

可能在XAML中的ActivityCollection之前设置DowIndex之前

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

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

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

回复:XAML订购。我也会这么想,但在这种情况下没关系;DowIndexProperty始终首先获取其值。我看不出为什么它应该这样做,但它确实这样做了。你是指数据上下文吗??如果是这样,DataGridColumn就不是一个框架元素,因此也没有免费的框架元素。出于同样的原因,您也无法为其设置样式。我一直将其作为DPsre sysntax的一个子类来处理的主要原因之一。是的,你是对的,这是一个更可读的绑定。Cheers新建PropertyMetadata(0,OnDowIndexSet)将属性默认值设置为0。看到了吧,我找到你了。不,我需要在xaml中设置的值,因此默认值0是非起始值。我也会这么想,但在这种情况下没关系;DowIndexProperty始终首先获取其值。我看不出为什么它应该这样做,但它确实这样做了。你是指数据上下文吗??如果是这样,DataGridColumn就不是一个框架元素,因此也没有免费的框架元素。出于同样的原因,您也无法为其设置样式。我一直将其作为DPsre sysntax的一个子类来处理的主要原因之一。是的,你是对的,这是一个更可读的绑定。Cheers新建PropertyMetadata(0,OnDowIndexSet)将属性默认值设置为0。看到了吧,我找到你了。不,我需要在xaml中设置的值,因此默认值0在这里不是起始值