2009-06-19 14 views

risposta

10

Questo XAML farà qualcosa di simile, ha un ListView visibile che mostra un elenco e un messaggio nascosto e cambia visibilità quando l'elenco è vuoto utilizzando un trigger .

Il codice seguente funzionerà con qualsiasi IList o ICollection ma la stessa tecnica può essere utilizzata con qualsiasi origine dati, come sempre, se si desidera che il display si aggiorni quando si aggiungono o si rimuovono gli elementi necessari per utilizzare ObservableCollection o simili .

ContentPresenter è presente perché è possibile utilizzare solo trigger all'interno di un modello o uno stile, quindi inseriamo i nostri controlli in un DataTemplate e utilizziamo ContentPresenter per mostrarlo.

Se si desidera che il messaggio venga visualizzato all'interno di ListView, basta rimuovere l'incastonatore che nasconde il controllo ListView e aggiungere un margine a TextBlock per posizionarlo dove dovrebbe trovarsi il primo elemento in ListVisualizza.

<ContentPresenter Content="{Binding}"> 
    <ContentPresenter.ContentTemplate> 
     <DataTemplate> 
      <Grid> 
       <ListView Name="list" ItemsSource="{Binding MyList}"/> 
       <TextBlock Name="empty" Text="No items found" Visibility="Collapsed"/> 
      </Grid> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding MyList.Count}" Value="0"> 
        <Setter TargetName="list" Property="Visibility" Value="Collapsed"/> 
        <Setter TargetName="empty" Property="Visibility" Value="Visible"/> 
       </DataTrigger>       
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </ContentPresenter.ContentTemplate> 
</ContentPresenter> 
+0

Questo esempio non funziona per nascondere TextBlock se non vuoto, perché il valore di visibilità non è booleano. È possibile passare a nascosto? –

+0

@Shurup, non capisco il tuo commento, il TextBlock è nascosto quando la lista non è vuota - ma potresti voler vedere BooleanToVisibilityConverter – Nir

-1

Associare a una proprietà DataSource + che restituisce il testo desiderato? Slot in un oggetto fittizio la cui rappresentazione String è il testo desiderato.