2016-08-09 9 views
2

Ich arbeite an einer UWP-Anwendung, die Daten in einem ListView gebunden hat. Ich habe versucht, eine Möglichkeit zu finden, ein Steuerelement zu verbergen, wenn keine Daten vorhanden sind. Zum Beispiel habe ich eine einfache Version von dem, was ich tue:Wie Sie ein datengebundenes Steuerelement in UWP reduzieren, wenn keine Daten im Feld vorhanden sind

<ListView Name="lvwMaster" ItemsSource="{x:Bind CollectionOfPeople}"> 
    <ListView.ItemTemplate> 
     <DataTemplate x:DataType="data:Person"> 
      <StackPanel Name="pnlOnePerson" Margin="10"> 
       <TextBlock Name="lblFirstName" Text="{x:Bind FirstName}" /> 
       <TextBlock Name="lblMiddleName" Text="{x:Bind MiddleName}" Height="Auto" /> 
       <TextBlock Name="lblLastName" Text="{x:Bind LastName}" /> 
       <TextBlock Name="lblBirthDate" Text="{x:Bind BirthDate}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Da nicht jeder einen mittleren Namen hat, mag ich das mittlere Namensfeld versteckt werden, wenn sie leer ist.

example of what it looks like when run

Vorschläge, wie ich das mittlere Namensfeld zu verbergen könnte der Lage sein, wenn die Person keinen zweiten Vornamen haben?

+0

Sie sollten einen [Konverter] verwenden (https://msdn.microsoft.com/library/windows/apps/windows.ui. xaml.data.binding.converter). – tao

Antwort

1

einen Value Converter

class TextToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     string name = System.Convert.ToString(value); 
     if (string.IsNullOrEmpty(name)) 
     { 
      return Visibility.Collapsed; 
     } 
     return Visibility.Visible;  } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

innerhalb der Seite Verwenden Sie den Konverter als statische Ressource definieren.

<Page.Resources> 
    <local:TextToVisibilityConverter x:Name="ConverterNameHere"/> 
</Page.Resources> 

in Ihrer Datenvorlage es wie folgt verwenden,

<DataTemplate x:DataType="data:Person"> 
        <StackPanel Name="pnlOnePerson" Margin="10"> 
         <TextBlock Name="lblFirstName" Text="{x:Bind FirstName}" /> 
         <TextBlock Name="lblMiddleName" Text="{x:Bind MiddleName}" Height="Auto" Visibility ="{Binding path=Text, ElementName="lblMiddleName" Converter={StaticResource ConverterNameHere}}" /> 
         <TextBlock Name="lblLastName" Text="{x:Bind LastName}" /> 
         <TextBlock Name="lblBirthDate" Text="{x:Bind BirthDate}" /> 
        </StackPanel> 
       </DataTemplate> 
+0

Sie haben vergessen, Konverter in Seitenressourcen hinzuzufügen: '' '' '' –

+0

Ja werde ich aktualisieren es –

+0

Danke Nuwannnz. Deine Lösung hat funktioniert. Ich musste das Format der Bindung im zweiten Namen ändern, damit es funktioniert. '' – ThePeter

Verwandte Themen