Xaml GridView-对已选项目激发SelectionChanged事件
在我的Windows 8.1/Windows Phone 8.1应用程序中,我有一个GridView,我想在选中某个项目后更改我的VisualState。我可以通过这样的行为轻松做到这一点: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
<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 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 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,则不会发生我的操作