2013-08-20 3 views
2

У меня есть длинный список, и у меня есть шаблон данных в качестве шаблона элемента, содержащий изображение. Я хочу, чтобы источник изменялся на основе свойства модели. Я попытался с конвертером, но я не мог заставить его работать.ChangePropertyAction для управления изображением в шаблоне элемента LongListSelector

Теперь я пытаюсь использовать триггеры. У меня есть:

<Image Name="MovieThumbnail"> 
<i:Interaction.Triggers> 
    <ei:DataTrigger Binding="{Binding DataContext.IsCategoryCurrent,ElementName=LayoutRoot}" Value="true"> 
     <ei:ChangePropertyAction TargetObject="{Binding ElementName=MovieThumbnail}" TargetName="Source" Value="{Binding Path=Image120x170}" PropertyName="Source"/> 
    </ei:DataTrigger> 

    <ei:DataTrigger Binding="{Binding DataContext.IsCategoryCurrent,ElementName=LayoutRoot}" Value="false"> 
     <ei:ChangePropertyAction TargetObject="{Binding ElementName=MovieThumbnail}" TargetName="Source" Value="{x:Null}" PropertyName="Source"/> 
    </ei:DataTrigger> 
</i:Interaction.Triggers> 
</Image> 

Это работает почти так, как я хочу, за исключением того, что изображения повторяются. Как в фильме есть фотография другого фильма. Я думаю, что это потому, что я привязываюсь по имени элемента, а элемент управления изображением имеет несколько экземпляров (по одному для каждого элемента), но я думаю, что они не могут видеть друг друга. Любая помощь высоко ценится.

EDIT:

После дальнейших исследований, кажется, что это происходит из-за большого выбора списка.

Сначала я загружаю 40 предметов, а затем загружаю еще 40, но вторая партия из 40 предметов получает фотографии из первой партии. Если я создаю событие с измененным свойством, то снимки из второй партии устанавливаются на все элементы, повторяющиеся. Я понятия не имею, почему это происходит.

Если я загружаю еще 40 и снова увеличиваю свойство, измененное на IsCategoryCurrent, изображения из 3-й партии получаются три раза.

ответ

2

мне удалось это исправить:

<Image 
    Grid.RowSpan="2" 
    Name="MovieThumbnail" 
    Stretch="Fill" 
    Width="130" Height="195" 
    HorizontalAlignment="Center" 
    VerticalAlignment="Center"> 
<i:Interaction.Triggers> 
    <ei:DataTrigger Binding="{Binding DataContext.IsCategoryCurrent,ElementName=LayoutRoot}" 
        Value="true"> 
     <ei:ChangePropertyAction TargetObject="{Binding ElementName=MovieThumbnail}" 
           TargetName="Source" 
           PropertyName="Source"> 
      <ei:ChangePropertyAction.Value> 
       <BitmapImage CreateOptions="BackgroundCreation" 
          UriSource="{Binding Path=Image120x170}"/> 
      </ei:ChangePropertyAction.Value> 
     </ei:ChangePropertyAction> 
    </ei:DataTrigger> 
    <ei:DataTrigger Binding="{Binding DataContext.IsCategoryCurrent,ElementName=LayoutRoot}" 
        Value="false"> 
     <ei:ChangePropertyAction TargetObject="{Binding ElementName=MovieThumbnail}" 
           TargetName="Source" 
           Value="{x:Null}" 
           PropertyName="Source"/> 
    </ei:DataTrigger> 
</i:Interaction.Triggers> 
</Image> 

И я поднять свойство измененное событие IsCategoryCurrent при каждом изменении.

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