Listview 当字段中没有数据时,如何在UWP中折叠数据绑定控件

Listview 当字段中没有数据时,如何在UWP中折叠数据绑定控件,listview,hide,uwp,bind,no-data,Listview,Hide,Uwp,Bind,No Data,我正在开发一个在ListView中绑定数据的UWP应用程序。我一直在试图找到一种方法,在没有数据时折叠(隐藏)控件。例如,我对我正在做的事情做了一个简单的版本: <ListView Name="lvwMaster" ItemsSource="{x:Bind CollectionOfPeople}"> <ListView.ItemTemplate> <DataTemplate x:DataType="data:Person">

我正在开发一个在ListView中绑定数据的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>

因为不是每个人都有中间名,所以我希望中间名字段在为空时隐藏

如果此人没有中间名,有没有关于如何隐藏中间名字段的建议?

使用值转换器

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>


您应该使用。您忘记了在页面资源中添加转换器:
谢谢Nuwannnz。你的解决方案奏效了。我确实必须更改中间名中绑定的格式,以便使其有效。代码>
如果您觉得此选项有用,请将其标记为答案:)