EventToCommand可能存在Mvvm-light错误

时间:2013-05-17 17:33:30

标签: c# windows-phone-7 xaml mvvm-light

一切都很简单:我有一个ListBoxSelector(app适用于wp7)。项目包括图片和一些文字。项目样式存储在StyleTemplate内部。可以点击图像,其事件就像

<Style x:Key="ProductSearchListViewerItemStyle" TargetType="ListBoxItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Grid>                                       
                    <Border BorderThickness="0,0,0,0.5">
                        <Grid>
                            <Border Grid.Column="0" Background="Transparent">
                                <Grid> !!! Image is here
                                </Grid>

                                <interactivity:Interaction.Triggers>
                                    <interactivity:EventTrigger EventName="Tap">
                                        <command:EventToCommand 
                                            Command="{Binding Source={StaticResource ViewModelLocator}, Path=NavigationViewModel.OnProductSearchListViewerTapImageCommand, Mode=OneWay}"
                                            CommandParameter="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DataContext}"/>
                                    </interactivity:EventTrigger>
                                </interactivity:Interaction.Triggers>
                            </Border>
                   ...and so on...

活动本身:

private void OnProductSearchListViewerTapImage(ProductItem item)
    {
        if (item == null) return;

        MessengerInstance.Send<ProductItem, ShoppingCartViewModel>(item);
    }

到目前为止一切顺利。在运行时,一切正常......在95%的情况下。我得到了一个包含正确物品的物品清单,当我按下某个物品的图像时,事件上升,命令被发送,正确的物品被添加到购物车。

BUT。在某些情况下(问题开始,当点击24-25项时),错误的项目被添加到购物车(列表正确呈现)。

  • 首先我做了什么 - 检查命令:它包含错误的项目。说,我正在点击第24个项目,但在命令内部,“item”首先从列表中开始。
  • 我做了第二件事 - 我抓住了XamlSpy并检查了该项目的DataContext是什么。它保存第24个项目(因为项目的图像和描述正确呈现)。

这意味着,问题出在Event和Command之间。所以,在EventToCommand中出了点问题。

任何人都有相同的经历或想法吗?

1 个答案:

答案 0 :(得分:0)

实际上,我最终将ControlTemplate移动到单独的DataTemplate,而不使用样式。

<DataTemplate x:Key="ProductsListViewerItemTemplate">
    <Grid>
     ****

至少,现在这个bug还没有复制。