2010-06-05 3 views
12

Я получаю это в моем окне вывода:WPF: Как отлаживать ошибки привязки?

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')

Это мой XAML, который при запуске выглядит правильно

 <GroupBox Header="Grant/Deny Report"> 
      <ListBox ItemsSource="{Binding Converter={StaticResource MethodBinder}, ConverterParameter=GrantDeny, Mode=OneWay}"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <Label Content="{Binding Entity}"/> 
          <Label Content="{Binding HasPermission}"/> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </GroupBox> 

ответ

8

Я также буду рекомендовать Bea Stollnitz's article но Джонатан Аллен получил свой пост в пока я все еще печатал это. Я также рекомендую ссылки в this blog entry.

В этом конкретном случае вы можете видеть, что где-то ListBoxItem имеет привязку FindAncestor к ItemControl, которая терпит неудачу. Это говорит вам сразу есть ListBoxItem где-то есть либо:

  1. Не в визуальном дереве, или
  2. Не под ItemsControl (а ListBox является ItemsControl)

Кроме того, вы знаете, что кто-то где-то привязывает свойство VerticalContentAlignment ListBoxItem к FindAncestor.

Глядя на системные темы (поставляется с Expression Blend, а также доступны через BAMLViewer NET Отражатель Добавить в), мы видим это:

<Style x:Key="{x:Type ListBoxItem}"> 
    <Setter Property="VerticalContentAlignment" 
      Value="{Binding Path=VerticalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}" /> 

Это объясняет, где связывание происходит от. Следующий вопрос: как создается ListBoxItem, который не находится в ListBox (или другом ItemsControl)?

Некоторые вещи, чтобы искать:

  • Вы построения ListBoxItems в коде где-нибудь?
  • Есть ли какой-либо ListBoxItem, явно указанный в вашем XAML?
  • У вас есть код, который вручную манипулирует элементами в ListBox?

Надеюсь, это поможет вам в правильном направлении.

+0

Для ваших квестов, нет, нет и нет. Единственное, что интересно, это то, что ItemsSource является таблицей данных. –

+0

Но эй, по крайней мере, ты дал мне достаточно информации, чтобы знать, что это в таблицах стилей. –

3

У меня возникла аналогичная проблема с TreeView (хотя мои ошибки привязки данных появились как информационные).

Я решил проблему, указав неявный стиль в ресурсе TreeView для TreeViewItem. В этом стиле я определил отсутствующие свойства выравнивания вертикального и горизонтального содержимого.

<TreeView.Resources> 
    <Style TargetType="{x:Type TreeViewItem}" > 
      <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
    </Style> 
</TreeView.Resources> 
+0

Я столкнулся с этой проблемой и решил ее с помощью вашего подхода. Благодаря! – cordialgerm

Смежные вопросы