【问题标题】:GridView - Fire SelectionChanged event on an already selected itemGridView - 在已选择的项目上触发 SelectionChanged 事件
【发布时间】:2015-10-07 15:10:49
【问题描述】:

在我的 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,但在选择项目之前触发了该事件,因此它不起作用。

【问题讨论】:

    标签: xaml gridview mvvm mvvm-light selectionchanged


    【解决方案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>
    

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

    【讨论】:

      【解决方案2】:
      1. 选择您的 Gridview 控件
      2. 将选定的索引属性从 0 更改为 -1

      我不确定它是否有效,但你可以尝试。

      【讨论】:

      • 感谢 Dipak,但如果我这样做,我会丢失 selectedItem。这不是我想要的。我希望用户能够点击已选择的项目。
      • 然后在 selectionChanged 事件上使用标志变量.. 比如 if flag==0 { flag = 1 Your action code } 它不会在 load 事件上运行你的动作代码
      • SelectionChanged 是一个实际上“仅”在“选择更改”时触发的事件,因此如果您不想自己操作选定的索引,则不能使用它。一个可能的解决方案是使用 Tapped 事件。因为点击一个项目时它总是会触发......
      • @Dipak :但问题是单击已选项目时 selectionChanged 事件不会触发...所以无论如何如果没有标志,如果用户单击已经选定项。
      • 感谢 Depechie,但是当您在 GridView 的任何项目之外单击时,点击了 Happeb
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 2021-08-28
      相关资源
      最近更新 更多