Как свернуть элемент управления с привязкой данных в UWP, когда в поле нет данных

Я работаю над приложением UWP, данные которого связаны в ListView. Я пытался найти способ свернуть (скрыть) элемент управления, когда нет данных. Например, я сделал простую версию того, что я делаю:

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

Поскольку не у всех есть отчество, я хочу, чтобы поле отчества скрывалось, когда оно пустое.

пример того, как это выглядит при запуске

Любые предложения о том, как я мог бы скрыть отчество, если у человека нет отчества?

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>
Другие вопросы по тегам