Xaml GridView-对已选项目激发SelectionChanged事件

Xaml GridView-对已选项目激发SelectionChanged事件,xaml,gridview,mvvm,mvvm-light,selectionchanged,Xaml,Gridview,Mvvm,Mvvm Light,Selectionchanged,在我的Windows 8.1/Windows Phone 8.1应用程序中,我有一个GridView,我想在选中某个项目后更改我的VisualState。我可以通过这样的行为轻松做到这一点: <GridView IsItemClickEnabled="True" ItemsSource="{Binding Collections}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}"> <Interactivit

在我的Windows 8.1/Windows Phone 8.1应用程序中,我有一个GridView,我想在选中某个项目后更改我的VisualState。我可以通过这样的行为轻松做到这一点:

 <GridView IsItemClickEnabled="True" ItemsSource="{Binding Collections}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}">
        <Interactivity:Interaction.Behaviors>
            <Core:EventTriggerBehavior EventName="SelectionChanged">
                <Core:GoToStateAction StateName="NextVisualState"/>
            </Core:EventTriggerBehavior>
        </Interactivity:Interaction.Behaviors>
        <GridView.ItemTemplate>
            <DataTemplate >
                <Grid Width="80" Height="80">
                    <TextBlock Text="{Binding ItemName}" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsWrapGrid Orientation="Horizontal" MinWidth="150"></ItemsWrapGrid>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
    </GridView>

当我的项目已被选中时,会出现问题(用户可以在此VisualState上,并且该项目已通过绑定或其他方式被选中),如果用户单击已选择的项目,我希望触发SelectionChanged事件(以便他可以转到下一个VisualState)

我尝试更改ItemClick事件的VisualState,但该事件是在选择该项目之前触发的,因此无法工作

  • 选择Gridview控件
  • 将所选索引属性从0更改为-1
  • 我不确定它是否有效,但你可以试试

    <GridView ItemsSource="{Binding Collections}"  SelectedItem="{Binding SelectedItem,Mode=TwoWay}" x:Name="MyGridView">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Grid Width="80" Height="80" Background="Transparent">
                        <Interactivity:Interaction.Behaviors>
                            <Core:EventTriggerBehavior EventName="Tapped">
                                <Core:InvokeCommandAction Command="{Binding DataContext.ChangeStateCommand, ElementName=MyGridView}" CommandParameter="NextState"></Core:InvokeCommandAction>
                            </Core:EventTriggerBehavior>
                        </Interactivity:Interaction.Behaviors>
                        <TextBlock Text="{Binding ItemName}" HorizontalAlignment="Center"  VerticalAlignment="Center"></TextBlock>
                    </Grid>
                </DataTemplate>
            </GridView.ItemTemplate>
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <ItemsWrapGrid Orientation="Horizontal" MinWidth="150"></ItemsWrapGrid>
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>
        </GridView>
    
  • 选择Gridview控件
  • 将所选索引属性从0更改为-1
  • 我不确定它是否有效,但您可以试试。

    
    
    <GridView ItemsSource="{Binding Collections}"  SelectedItem="{Binding SelectedItem,Mode=TwoWay}" x:Name="MyGridView">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Grid Width="80" Height="80" Background="Transparent">
                        <Interactivity:Interaction.Behaviors>
                            <Core:EventTriggerBehavior EventName="Tapped">
                                <Core:InvokeCommandAction Command="{Binding DataContext.ChangeStateCommand, ElementName=MyGridView}" CommandParameter="NextState"></Core:InvokeCommandAction>
                            </Core:EventTriggerBehavior>
                        </Interactivity:Interaction.Behaviors>
                        <TextBlock Text="{Binding ItemName}" HorizontalAlignment="Center"  VerticalAlignment="Center"></TextBlock>
                    </Grid>
                </DataTemplate>
            </GridView.ItemTemplate>
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <ItemsWrapGrid Orientation="Horizontal" MinWidth="150"></ItemsWrapGrid>
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>
        </GridView>
    
    我不得不在网格数据模板中设置一个背景,使整个网格可以点击,我不知道为什么。

    
    

    我必须在网格数据模板中设置一个背景,使整个网格可点击,我不知道为什么。

    Thx Dipak,但如果我这样做,我会松开selectedItem。这不是我想要的。我希望用户能够单击已选择的项目。然后在selectionChanged事件上使用标志变量。。与if flag==0{flag=1您的操作代码}一样,它不会在加载事件时运行您的操作代码SelectionChanged是一个“仅”在“选择已更改”时触发的事件,因此如果您不想自己操作所选索引,则不能使用该事件。一种可能的解决方案是使用抽头事件。因为点击一个项目时总是会触发…@Dipak:但问题是当点击一个已经选择的编辑项目时,selectionChanged事件不会触发。。。因此,不管怎么说,没有标志,如果用户单击已选择的EdItem.Thx depchie,但在GridViewThx Dipak的任何项目之外单击Happeb时,我的操作将不会发生,但如果我这样做,我会松开selectedItem。这不是我想要的。我希望用户能够单击已选择的项目。然后在selectionChanged事件上使用标志变量。。与if flag==0{flag=1您的操作代码}一样,它不会在加载事件时运行您的操作代码SelectionChanged是一个“仅”在“选择已更改”时触发的事件,因此如果您不想自己操作所选索引,则不能使用该事件。一种可能的解决方案是使用抽头事件。因为点击一个项目时总是会触发…@Dipak:但问题是当点击一个已经选择的编辑项目时,selectionChanged事件不会触发。。。因此,不管怎样,在没有标记的情况下,如果用户单击已选择的editem.Thx depchie,但在GridView的任何项目之外单击Happeb,则不会发生我的操作