2013-05-17 74 views
1

一切都很簡單:我有一個ListBoxSelector(應用程序用於wp7)。項目由圖片和一些文本組成。項目樣式存儲在StyleTemplate內部。圖像可以挖掘,其事件就像EventToCommand可能帶來的Mvvm-light錯誤

<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項,因爲它應該是(因爲項目的圖像和描述已正確呈現)。

這意味着問題出在Event和Command之間。所以,EventToCommand內部有些問題。

任何人都有相同的經驗或任何想法?

回答

0

事實上,我最終將ControlTemplate移動到單獨的DataTemplate,而不使用樣式。

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

至少,現在該錯誤不再生成。