GridView - 已选择项目上的Fire SelectionChanged事件

时间:2015-10-07 15:10:50

标签: 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}">
        <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,但是在选择项目之前触发了事件,因此它无法正常工作。

2 个答案:

答案 0 :(得分:0)

  1. 选择Gridview控件
  2. 将选定的Index属性从0更改为-1
  3. 我不确定它是否有效,但你可以试试。

答案 1 :(得分:0)

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

我必须在Grid Datatemplate中设置一个背景,以使整个Grid可点击,我不知道为什么。