1

次の問題
があります。いくつかの文字列プロパティを持つクラスがあり
、そのようなクラス エンティティのコレクションがあります。

そのコレクションは、一部のウィンドウの左側にツリーで表示され、右側に詳細が表示されます。選択したノードの文字列プロパティを詳細にコンボボックスにバインドしています。
最初のコンボボックスには常に同じ ItemsSource がありますが、2 番目の ItemsSource は最初のコンボの SelectedItem に依存します...

<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"  />

ツリーに新しいノードを作成すると、両方の文字列プロパティが null 参照になります。そして、最初のコンボが NEW ノードの SelectedItem を変更すると、2 番目の ComboBox は、ツリーに新しいノードを作成する前に選択された OLD ノードの文字列値に null をバインドします... この場合、どうすればよいのでしょうか?

4

1 に答える 1

1

答えを見つけました。
バインディングは宣言の順序で通知されます。WPFはバインディングの依存関係を分析しません:)したがって、ComboBoxの宣言を交換すると問題が解決します...これらのComboBoxをグリッドに配置してGrid.Rowを手動で設定するため、このシナリオでは許容できます。およびGrid.Column...ソリューションはあまり満足のいくものではありませんが、機能します。

于 2009-03-03T13:37:19.937 に答える