2016-04-15 6 views
0

Я создал свойство Index для объекта в списке, который привязан к ItemsSource ItemsControl, но когда я поставил точку останова в своем конверторе, я вижу, что значение для этого связывания - DependancyProperty.UnsetValue. Контекст данных для ContentPresenter - это объект, на объекте есть свойство, почему он не видит свойство Index?Почему ошибка привязки в ItemsControl

<ItemsControl ItemsSource="{Binding Charts}" x:Name="ItemsControl"> 
    <ItemsControl.ItemTemplate> 
     <ItemContainerTemplate > 
      <ContentPresenter Content="{Binding}"> 
       <ContentPresenter.Visibility> 
        <MultiBinding Converter="{StaticResource Converter}"> 
         <Binding Path="Index"/> 
         <Binding Path="WhichAreVisible" /> 
        </MultiBinding> 
       </ContentPresenter.Visibility> 
      </ContentPresenter> 
     </ItemContainerTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

Можете ли вы дать код связанного объекта? –

ответ

2

ItemTemplate Неверное место для этого. Это будет или ItemContainerTemplate, используемый для отображения содержимого элементов в ItemsControl, в рамках какого-либо другого контрольного контейнера для детей - по одному на каждого ребенка. Этот другой контроль контейнера - это то, что вы хотите скрыть, а не только контент внутри него. Конечно, если он авто-размер без отступов или полей, он не займет какое-либо место после того, как содержимое рухнет, но тогда вы рассчитываете на то, что осталось.

Попробуйте это и посмотрите, что вы получаете; ItemContainerStyle управляет стилем фактического дочернего элемента. В ListBox он будет применяться к типу ListBoxItem; в ItemsControl, дети ContentPresenter s. Если у вас уже есть ItemContainerStyle, просто добавьте к нему этот триггер.

<ItemsControl.ItemContainerStyle> 
    <Style TargetType="ContentPresenter"> 
     <Setter Property="Visibility"> 
      <Setter.Value> 
       <MultiBinding Converter="{StaticResource Converter}"> 
        <Binding Path="Index"/> 
        <Binding Path="WhichAreVisible" /> 
       </MultiBinding> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ItemsControl.ItemContainerStyle> 
+0

Удивительно, это именно то, что мне нужно. Спасибо – kleineg

+0

@kleineg Рад помочь. Кстати, я ошибался: 'TargetType' должен быть' ContentPresenter', а не 'ContentControl'. –

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