2

我有一个长列表选择器,并且我有一个数据模板作为项目模板,其中包含一个图像。我希望根据模型中的属性更改源。我尝试使用转换器,但无法正常工作。

现在我正在尝试使用触发器。我有:

<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 个项目从第一批获取图片。如果我提出一个属性更改事件,那么第二批的图片将设置在所有重复的项目上。我不知道为什么会这样。

如果我加载另一个 40 并再次提高 IsCategoryCurrent 上的属性,则第三批的图片将设置 3 次。

4

1 回答 1

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 的属性更改事件。

于 2013-08-23T09:43:06.150 回答