Question

J'ai le problème suivant:
  il y a une classe avec quelques propriétés de chaîne
  il existe une collection de telles entités de classe

Cette collection apparaît dans l’arborescence à gauche de certaines fenêtres et les détails à droite. Je lie les propriétés de chaîne du nœud sélectionné aux listes déroulantes de manière détaillée.
  La première liste déroulante a toujours le même élément Source, mais la seconde, élémentSource, dépend de SelectedItem de la première liste déroulante ...

<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, lorsque je crée un nouveau noeud dans l'arborescence, les deux propriétés de chaîne ont une référence nulle. Et lorsque la première combinaison modifie son SelectedItem pour le nœud NEW, la deuxième ComboBox lie null à la valeur de chaîne du nœud OLD, qui ont été sélectionnées avant la création d'un nouveau nœud dans l'arborescence ... Je me demande ce que je dois faire dans ce cas?

Était-ce utile?

La solution

Je viens de trouver une réponse.
 Les liaisons sont notifiées dans l'ordre de leur déclaration, WPF ne va pas analyser les dépendances des liaisons :)  Donc, échanger les déclarations de ComboBox résout le problème ... C'est acceptable dans ce scénario car je place ces ComboBox dans Grid en définissant manuellement leurs propriétés Grid.Row et Grid.Column ...  Bien que la solution ne soit pas très agréable, cela fonctionne!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top