2016-08-09 14 views
2

我上有一个ListView绑定数据UWP应用程序的工作没有任何数据。我一直在试图找到一种方法来在没有数据时折叠(隐藏)控件。例如,我做的我做一下简单的版本:如何崩溃的UWP数据绑定控件时,有在现场

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

因为不是每个人都有一个中间的名字,我想中间名称字段被隐藏时,它是空的。

example of what it looks like when run

如何我也许能隐藏中间名外地当人没有中间的名字有什么建议?

+0

您应该使用[转换器](https://msdn.microsoft.com/library/windows/apps/windows.ui。 xaml.data.binding.converter)。 – tao

回答

1

使用值转换器

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(); 
    } 
} 

定义转换器在页面内的静态资源。

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

在数据模板中使用它像这样,

<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

你忘了在页面资源中添加转换器: '' '' '' –

+0

是的,我会更新它 –

+0

谢谢Nuwannnz。您的解决方案奏效我必须改变中间名称的绑定格式才能使其工作。 '' – ThePeter