2013-04-10 58 views
1

我一直在嘗試在使用MVVM Light框架的簡單Windows應用商店應用中使用附加行爲。由於我們無法使用System.Windows.Interactivity,就像在Windows Phone中一樣,我一直在使用Windows.UI.InteractivityWinRtBehaviors lybraries。他們工作得很好,但問題是我不能在數據模板內聲明附加的行爲。使用MVVM Light在Windows應用商店中附加行爲

我真正想要的是附加命令到GridView中的任何項目,以便我可以傳遞項目ID作爲參數。由於附着行爲doesen't工作中,我發現的唯一解決方案包括使用在GridView的「的SelectionChanged」事件和傳遞的SelectedItem作爲參數傳遞給在視圖模型屬性:

<GridView Grid.Row="1" 
       x:Name="itemGridView" 
       AutomationProperties.AutomationId="ItemsGridView" 
       AutomationProperties.Name="Items" 
       TabIndex="1" 
       Padding="116,136,116,46" 
       ItemsSource="{Binding GeoTopArtists.topartists.artist}" 
       SelectionMode="Single" 
       SelectedItem="{Binding SelectedArtist, Mode=TwoWay}" 
       IsSwipeEnabled="False" 
       IsItemClickEnabled="False"> 

     <WinRtBehaviors:Interaction.Behaviors> 
      <Win8nl_Behavior:EventToCommandBehavior Event="SelectionChanged" Command="SelectArtistCommand" CommandParameter="{Binding SelectedArtist.mbid}"/> 
     </WinRtBehaviors:Interaction.Behaviors> 

     <GridView.ItemTemplate> 
      <DataTemplate> 
       <Grid HorizontalAlignment="Left" Width="250" Height="250"> 
        <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> 
         <Image Source="{Binding image[4].text}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> 
        </Border> 
        <StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}"> 
         <TextBlock Text="{Binding name}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="60" Margin="15,0,15,0"/> 
         <TextBlock Text="{Binding url}" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/> 
        </StackPanel> 
       </Grid> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 

這將是非常漂亮的做類似的東西(那裏沒有必要在視圖模型一個SelectedArtist屬性)

<GridView Grid.Row="1" 
       x:Name="itemGridView" 
       AutomationProperties.AutomationId="ItemsGridView" 
       AutomationProperties.Name="Items" 
       TabIndex="1" 
       Padding="116,136,116,46" 
       ItemsSource="{Binding GeoTopArtists.topartists.artist}" 
       SelectionMode="None" 
       IsSwipeEnabled="False" 
       IsItemClickEnabled="False"> 

     <GridView.ItemTemplate> 
      <DataTemplate> 
       <Grid HorizontalAlignment="Left" Width="250" Height="250"> 
        <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> 
         <Image Source="{Binding image[4].text}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> 
        </Border> 
        <StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}"> 
         <TextBlock Text="{Binding name}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="60" Margin="15,0,15,0"/> 
         <TextBlock Text="{Binding url}" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/> 
        </StackPanel> 

     <WinRtBehaviors:Interaction.Behaviors> 
      <Win8nl_Behavior:EventToCommandBehavior Event="Tapped" Command="SelectArtistCommand" CommandParameter="{Binding Artist.mbid}"/> 
     </WinRtBehaviors:Interaction.Behaviors> 

       </Grid> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 

回答

0

link可以幫助你。依賴項屬性被定義並掛鉤到視圖模型中的命令。因此,無論何時進行互動,都可以將選定的項目作爲指令參數發送,這在本視頻中已清楚地展現出來。

相關問題