EventToCommand可能存在mvm -light bug
本文关键字:-light bug mvm 存在 EventToCommand | 更新日期: 2023-09-27 18:14:03
一切开始很简单:我有一个ListBoxSelector(应用程序是为wp7)。项目由图片和一些文字组成。Items样式存储在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项,但在命令中,"item"是列表中的第一个。
- 第二我做了什么-我抓住XamlSpy和检查,什么是项目的DataContext。它保存了第24个项目,因为它应该(因为项目的图像和描述被正确渲染)。
这意味着问题在Event和Command之间。所以,EventToCommand内部有问题。
有人有相同的经历或想法吗?
实际上,我最终将ControlTemplate移动到单独的DataTemplate,而不使用style。
<DataTemplate x:Key="ProductsListViewerItemTemplate">
<Grid>
****
至少,现在这个bug不再重现了