我有一个长列表选择器,我有一个datatemplate作为项目模板,包含一个图像。我希望源根据模型中的属性进行更改。我试过转换器,但我无法让它工作。
现在我正在尝试使用触发器。我有:
<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>
它的工作方式几乎是我想要的,除了图像重复自己。因为在电影中有另一部电影的图片。我认为这是因为我按元素名称绑定,图像控件有多个实例(每个项目一个),但我认为他们无法看到对方。任何帮助高度赞赏。
修改
经过进一步调查后,似乎发生了这种情况,因为列表选择器很长。
我首先加载40个项目,然后加载另外40个项目,但第二批40个项目从第一批获取图片。如果我提出了属性更改事件,那么第二批中的图片将在所有重复的项目上设置。我不知道为什么会这样。
如果我再次在IsCategoryCurrent上加载另外40个并且提升属性,则第3批中的图片将被设置3次。
答案 0 :(得分: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的属性更改事件。