2014-12-15 10 views
8

Ho due pulsanti: pulsante A & Pulsante B. Entrambi vengono nascosti inizialmente. I dati vengono recuperati da una raccolta osservabile OCOLLection.Come attivare o disattivare la visibilità di due pulsanti utilizzando DataTrigger Behavior in XAML, WP 8.1?

Questo è quello che sto cercando di acheive:

1) Inizialmente, i due tasti sono nascosti. (Fatto)

2) Al primo scatto (cliccando qualsiasi visualizzazione elemento della lista), Pulsante A deve essere reso visibile. (Done)

3) Sul resto dei clic (clic su qualsiasi altro elemento ListView, diverso da quello in cui il tasto A è stato tenuto visibile), il tasto B da rendere visibili. E la visibilità del pulsante A non dovrebbe tornare a Collapsed.

NB: Ogni voce di elenco deve contenere solo un pulsante (pulsante A o pulsante B).

OColection è impostato come ItemSource di un ListView. Ogni oggetto ListView è una griglia contenente un'immagine predefinita.

XAML:

 <ListView Name="lv" 
       ItemsSource="{Binding OCollection}" 
       Background="Linen"     
       Grid.ColumnSpan="3"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Grid Background="LightGray" Name="buttonGrid" Tag="{Binding dumyString}"> 
        <i:Interaction.Behaviors> 
         <ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.dumyString}" Value="{Binding dumyString}" ComparisonCondition="Equal"> 
          <ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonA}" PropertyName="Visibility" Value="Visible" /> 
         </ic:DataTriggerBehavior> 
         <ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.dumyString}" Value="{Binding dumyString}" ComparisonCondition="NotEqual"> 
          <ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonA}" PropertyName="Visibility" Value="Collapsed" /> 
         </ic:DataTriggerBehavior> 
         <ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=buttonGrid.Tag}" Value="{Binding dumyString}" ComparisonCondition="Equal"> 
          <ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonB}" PropertyName="Visibility" Value="Visible" /> 
         </ic:DataTriggerBehavior>        
        </i:Interaction.Behaviors> 

        <Image Source="/Assets/Logo.png" /> 
        <Button Name="ButtonA" Content="ButtonA" Background="Black" Visibility="Collapsed" /> 
        <Button Name="ButtonB" Content="ButtonB" Background="Black" Visibility="Collapsed" /> 
       </Grid> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

Per acheive 3, mi sto paragonando il tag della griglia con il contenuto tasto. Non funziona perché la logica è sbagliata. Bene, come si può ottenere ciò senza usare il codice. Sto seguendo lo schema MVVM, quindi adios to Code behind.

Un campione sarebbe bello perché sono solo un principiante.

Classe:

public class dumyClass 
{ 
    public string dumyString { get; set; } 
} 

risposta

1

penso che è possibile iscriversi alla manifestazione CollectionChanged nel vostro ViewModel, poi si legano visibilità dei pulsanti vostro da bool proprietà e gestire il vostro evento, cambiando il valore della vostra proprietà. Non dimenticare il convertitore BooleanToVisibility. Se è necessario posso darti qualche esempio di codice.

Qui è:

public FooViewModel() 
    { 
     this.OCollection += this.OCollectionChanged; 
    } 

    private void OCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     var collection = sender as System.Collections.Generic.List<Bar>; 
     if (collection != null && collection.Count > 1) 
     { 
      this.IsButtonVisible = true; 
      base.RaisePropertyChanged(() => this.IsButtonVisible); 
     } 
    } 

Se si sta utilizzando MVVM, spero che tu sappia che cosa è mezzo di RaisePropertyChanged e sai come associare la visibilità del pulsante per bool proprietà. Fammi sapere se qualcosa non puoi capire.

+0

@ w-d ho aggiunto del codice nel mio post, provalo e dimmi come va – RenDishen

Problemi correlati