Как свернуть элемент управления с привязкой данных в 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>