【问题标题】:Attached Behaviors in Windows Store Apps with MVVM Light带有 MVVM Light 的 Windows 应用商店应用程序中的附加行为
【发布时间】:2013-04-01 23:26:09
【问题描述】:

我一直在尝试使用 MVVM Light 框架在一个简单的 Windows 应用商店应用程序中使用附加行为。因为我们不能像在 Windows Phone 中那样使用 System.Windows.Interactivity,所以我一直在使用 Windows.UI.InteractivityWinRtBehaviors 库。它们运行良好,但问题是我无法在数据模板中声明附加行为

我真正想要的是将命令附加到 GridView 中的任何项目,以便我可以将项目 ID 作为参数传递。由于附加的行为不起作用,我找到的唯一解决方案是使用 GridView 的“SelectionChanged”事件并将 SelectedItem 作为参数传递给 ViewModel 中的属性:

    <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>

这样做会非常好(在 ViewModel 中不需要 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>

【问题讨论】:

    标签: mvvm windows-8 mvvm-light datatemplate attachedbehaviors


    【解决方案1】:

    这个link 可以帮助你。依赖属性被定义并连接到视图模型中的命令。因此,当视图中有交互时,可以将所选项目作为命令参数发送,这在此视频中已清楚演示。

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2014-02-03
      相关资源
      最近更新 更多