2015-03-26 2 views
1

В моем приложении WinRT/Phone 8.1 у меня есть форма с числом Grid s (в качестве оберток), каждая из которых содержит два или более TextBlock s. Я хочу показать только доступные данные, что означает, что если содержимое TextBlock конкретного Grid пусто, я хочу скрыть все Grid.Условное скрытие элементов управления WinRT/XAML с использованием стиля - возможно?

Например: '

<Grid x:Name="NameSection"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <TextBlock Grid.Row="0" 
       x:Name="NameLabel" 
       Text="Name:" /> 
    <TextBlock Grid.Row="1" 
       x:Name="Name" 
       Text="{Binding Name}" /> 
</Grid> 

Если ИмяTextBlock пусто, вся Grid «видимость s должна быть свернуты.

Добавление логики для этого или для кода сзади или (что еще хуже) ViewModel может стать беспорядочным для этой длинной формы, поэтому я задаюсь вопросом, могу ли я достичь этого с помощью XAML и стилей. Как это можно сделать в WinRT? Могу ли я нарисовать Grid так, чтобы его видимость была основана на содержании в одном из его подзонов?

ответ

1

конвертер

public class NullToVisibilityConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      return value == null ? Visibility.Collapsed: Visibility.Visible; 
     } 

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

затем использовать его как этот

<Grid x:Name="NameSection" Visibility={Binding Name, Converter={StaticResource MyNullConverter}}> 

редактирования: вы можете добавить string.IsNullOrEmpty (значение как строка) InstEd значения == NULL, если вы хотите проверить пустые строки также