2015-10-07 2 views
1

В моем приложении Windows 8.1/Windows Phone 8.1 у меня есть GridView, и я хочу изменить свой VisualState после выбора элемента. Я могу сделать это легко с поведением, как это:GridView - событие Fire SelectionChanged по уже выбранному элементу

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

Я пытаюсь изменить VisualState на событие ItemClick, но событие запускается до того, как элемент будет выбран, чтобы он не работал.

ответ

0
  1. Выберите ваш Gridview контроль
  2. Изменить выбранный индекс собственности от 0 до -1

Я не уверен, работает ли он или нет, но вы можете попробовать.

+0

Thx Dipak, но если я это сделаю, я потеряю выбранный элемент. И это не то, что я хочу. Я хочу, чтобы пользователь мог нажать на уже выбранный элемент. –

+0

Затем используйте переменную flag при событии selectedChanged .. like if flag == 0 {flag = 1 Ваш код действия} он не будет запускать ваш код действия при событии загрузки –

+0

SelectionChanged - это событие, которое на самом деле «только» срабатывает, когда «выбор» изменяется, поэтому вы не можете использовать это, если вы не хотите самостоятельно манипулировать выбранным индексом. Возможное решение - использовать событие Tapped. Поскольку это всегда срабатывает при нажатии элемента ... – Depechie

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> 

Я должен был установить фон в сетке DataTemplate, чтобы сделать всю сетку кликабельным я не знаю, почему.

Смежные вопросы