Проблема связывания WPF 2 ComboBox - PullRequest
1 голос
/ 03 марта 2009

У меня следующая проблема:
есть класс с парой строковых свойств
есть коллекция таких классов сущностей

Эта коллекция показана в виде дерева слева от некоторых окон, а детали показаны справа. Я связываю строковые свойства выбранного узла со списком в деталях.
Первый комбинированный список всегда имеет один и тот же ItemsSource, но второй 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"  />

Теперь, когда я создаю новый узел в дереве, оба свойства строки имеют нулевую ссылку. И когда первая комбинация изменяет свой SelectedItem для узла NEW, вторая ComboBox связывает ноль со строковым значением узла OLD, которые были выбраны до создания нового узла в дереве ... Интересно, что мне делать в этом случае?

1 Ответ

1 голос
/ 03 марта 2009

Я только что нашел ответ.
Привязки уведомляются в порядке их объявления, WPF не собирается анализировать зависимости привязок :) Так что замена объявлений ComboBox решает проблему ... Это приемлемо в этом сценарии, потому что я помещаю эти ComboBox в Grid, вручную устанавливая их Grid.Row и Grid.Column ... Хотя решение не очень приятное, оно работает!

...