0

J'ai un LongListSelector avec quelques textblocks et des images à l'intérieur.LongListSelector définir la visibilité de l'image sur le changement de sélection

Comment puis-je définir la visibilité de l'image par programmation?

Je les ai mis à collapsed et je veux leur permettre de cas selection_changed du LongListSelector.

XAML:

<phone:LongListSelector Name="LongListSel" Margin="0,-38,-22,2" ItemsSource="{Binding Items}" SelectionChanged="LongListSelector_SelectionChanged"> 
       <phone:LongListSelector.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal" Margin="12,2,0,4" Height="110" Width="432"> 
          <StackPanel Width="311" Margin="0,0,0,0"> 
           <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Margin="10,0" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="{StaticResource PhoneFontSizeLarge}" /> 
           <TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="10,-2,10,0" Style="{StaticResource PhoneTextSubtleStyle}" /> 
          </StackPanel> 
          <StackPanel Name="playImage" Height="50" Width="50" Margin="0,0,10,0"> 
           <Image Source="Assets/Tiles/Iconsmind-Outline-Play-Music.ico" Visibility="{Binding ImageVis}" Width="50" Height="50" HorizontalAlignment="Left" Tap="Image_Tap_1"/> 
          </StackPanel> 
          <StackPanel Name="downloadImage" Height="50" Width="50" Margin="0,0,0,0"> 
           <Image Source="Assets/Tiles/Download.ico" Visibility="{Binding ImageVis}" Width="50" Height="50" HorizontalAlignment="Left" Tap="Image_Tap_1"/> 
          </StackPanel> 
         </StackPanel> 
        </DataTemplate> 
       </phone:LongListSelector.ItemTemplate> 
      </phone:LongListSelector> 
     </phone:PanoramaItem> 

sélection événement a changé:

private void LongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      ItemViewModel item = new ItemViewModel(); 
      item.ImageVis = Visibility.Visible; 
      //it can't be called the way you are doing it of course and it still doesn't work 
     } 

ViewModel

 private Visibility _imageVis; 
     public Visibility ImageVis 
     { 
      get { return _imageVis; } 
      set 
      { 
       _imageVis = value; 
       NotifyPropertyChanged("ImageVis"); 
      } 
     } 
+1

Marque la source de votre article en tant que collection Observable. Et ajoutez une propriété Visibility supplémentaire à votre classe Model avec INotifyPropertyChanged implémentée. Lorsque vous sélectionnez un élément, modifiez la propriété de visibilité de l'élément sélectionné. Cela reflétera sur la vue. – asitis

+0

Si vous voulez dire quelque chose comme l'exemple ci-dessous, il ne fonctionne pas – Alejandro

Répondre

0

Créer un p roperty de type Visibility un lier à la visibilité de votre image.

ViewModel:

private Visibility _DownloadImage; 
    public Visibility DownloadImage 
    { 
     get { return _DownloadImage; } 
     set 
     { 
      if (_DownloadImage != value) 
      { 
       _DownloadImage = DownloadImage; 
       OnPropertyChanged("DownloadImage"); 
      } 
     } 
    } 

XAML

<Image Source="Assets/Tiles/Download.ico" Visibility="{Binding DownloadImage}" ... /> 

xaml.cs (Je préférerais lier la commande également à la ViewModel, pour conserver le motif MVVM)

private void LongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     DownloadImage = Visibility.Visible; 
    } 
+0

Vous pouvez utiliser 'Data Trigger' voir ici http://stackoverflow.com/a/29410912/1876572 – Eldho

+0

Cela n'a pas fonctionné. Je faisais exactement la même chose pour être honnête avant de poster ici. J'ai mis à jour le code – Alejandro

+0

J'essaie de changer la visibilité des images en cliquant sur le TextBlocks btw ... – Alejandro