一切开始都很简单:我有一个 ListBoxSelector(应用程序适用于 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% 的情况下。我得到了一个包含正确项目的项目列表,当我按下某个项目的图像时,事件被触发,命令被发送,正确的项目被添加到购物车中。
但。在某些情况下(问题开始,点击第 24-25 个项目时),错误的项目被添加到购物车(列表正确呈现)。
- 首先我做了什么 - 检查命令:它包含错误的项目。说,我正在点击第 24 个项目,但在命令内部,“项目”是列表中的第一个。
- 其次我做了什么 - 我抓住了 XamlSpy 并检查了项目的 DataContext 是什么。它包含第 24 个项目,因为它应该是(因为项目的图像和描述被正确呈现)。
这意味着,问题在于事件和命令之间。所以,EventToCommand 内部出了点问题。
有人有同样的经历或想法吗?