2009-03-03 10 views
1

J'ai le problème suivant:
il y a une classe avec deux propriétés de chaîne
il y a une collection de ces entités de classeWPF 2 problème de liaison ComboBox

Cette collection est montré dans l'arbre à gauche de quelques fenêtres et détails affichés sur la droite. Je lie les propriétés de chaîne du nœud sélectionné aux comboboxes dans les détails.
D'abord combobox ont toujours la même ItemsSource mais le second ItemsSource dépend de SelectedItem du premier combo ...

<ComboBox 
    Grid.Column="1" 
    SelectedIndex="0" 
    x:Name="cbClass" 
    Style="{DynamicResource ComboBoxValidationError}" 
    SelectedValue="{Binding Path=Description.Node.ClassName, ElementName=userControl, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    ItemsSource="{Binding Source={StaticResource classesProvider}}" 
    Width="Auto" 
    Height="Auto" 
    DisplayMemberPath="Description" 
    SelectedValuePath="FQN" /> 

<ComboBox 
    Grid.Column="1" 
    SelectedIndex="0" 
    Grid.Row="1" 
    x:Name="cbMethod" 
    SelectedValue="{Binding Path=Description.Node.MethodName, ElementName=userControl, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,diag:PresentationTraceSources.TraceLevel=High}" 
    ItemsSource="{Binding Path=SelectedItem.Methods, ElementName=cbClass, Mode=Default,diag:PresentationTraceSources.TraceLevel=High}" 
    Style="{DynamicResource ComboBoxValidationError}" 
    Width="Auto" 
    Height="Auto" 
    SelectedValuePath="Name" 
    DisplayMemberPath="Description" /> 

Maintenant, quand je crée un nouveau noeud dans l'arbre, les deux propriétés de chaîne ont référence null. Et quand la première combo change son SelectedItem pour le NOUVEAU nœud, ComboBox deuxième lie null à la valeur de chaîne du nœud OLD, qui ont été sélectionnés avant de créer un nouveau nœud dans l'arbre ... Je me demande ce que je devrais faire dans ce cas?

Répondre

1

Je viens de trouver une réponse.
La liaison est notifiée dans l'ordre de leur déclaration, WPF n'analyse pas les dépendances des liaisons :) Donc, les déclarations de ComboBoxes résout le problème ... C'est acceptable dans ce scénario parce que je place ces ComboBox dans Grid en réglant manuellement leur Grid.Row et Grid.Column ... Bien que la solution ne soit pas très agréable, ça marche!