2010-08-05 8 views
1

Le cœur de la question de cet article est de savoir si vous pouvez vous attendre à ce que tous les DP soient définis au moment où un rappel de propriété est défini pour l'un d'entre eux. Je pose cette question parce que ce n'est pas le comportement que je vois.DependencyProperty dépendances et PropertyCallbacks

Une classe a deux PDD, qui sont tous deux mis en XAML, comme ceci:

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

Dans la classe DayOfTheWeekColumn, les PDD sont déclarés comme si, pour l'instant:

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)); 

Lorsque le rappel OnDowIndexSet s'exécute, ActivityCollectionProperty est toujours null, mais lorsque le rappel OnActivityCollectionSet s'exécute, le DowIndexProperty est évalué. J'ai besoin des deux propriétés pour accomplir ce cas d'utilisation. Voici 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); 
    } 

Maintenant, cela fonctionne, mais il est fragile pour moi tant que je ne comprends pas le moment de la mise en deux propriétés au moment où les callbacks exécutent. Pourquoi les deux propriétés doivent-elles être disponibles pour OnActivityCollectionSet et non OnDowIndexSet?

Cheers,
Berryl

Répondre

1

Peut-être avant la DowIndex est réglée avant ActivityCollection en XAML?

Et vous ne pouvez pas utiliser la valeur DependencyProperty par défaut pour éviter ce problème?

Et petite astuce OT: La propriété de liaison Path est un défaut que vous pourriez peut utiliser cette notation plus courte:

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

re: commande XAML. J'aurais pensé cela aussi mais cela n'a pas d'importance dans ce cas; Le DowIndexProperty acquiert toujours sa valeur en premier. Je ne vois pas pourquoi il devrait le faire, mais c'est le cas. – Berryl

+0

DependencyProperty par défaut. Voulez-vous dire le DataContext ?? Si tel est le cas, DataGridColumn n'est pas un FrameworkElement et n'en a donc pas gratuitement. Vous ne pouvez pas non plus définir un style pour la même raison. L'une des principales raisons pour lesquelles j'ai approché cela en tant que sous-classe avec les DP – Berryl

+0

re sysntax. oui vous avez raison, c'est une liaison plus lisible. Vive – Berryl

Questions connexes