Как я могу сделать так, чтобы элемент управления был виден, только если значение привязки не является пустым местом?

#xaml #xamarin #xamarin.forms

#xaml #xamarin #xamarin.forms

Вопрос:

У меня есть этот XAML:

 <t:FooterTemplate Text="{Binding SourceFooter }" />
  

Объект имеет поля и цвет.

Как я могу сделать так, чтобы он не был виден с помощью isVisible, если значение SourceFooter = «» ?

Я хочу сделать что-то вроде:

 <t:FooterTemplate Text="{Binding SourceFooter }" IsVisible="{ SourceFooter != "" }" />
  

Но я знаю, что это невозможно сделать.

Комментарии:

1. либо привяжите его к SourceFooter с помощью ValueConverter, либо добавьте свойство bool к вашей виртуальной машине, которое проверяет, является ли SourceFooter пустым

Ответ №1:

Первый вариант: конвертер

Для этого вы можете использовать конвертер. Например:

  <t:FooterTemplate Text="{Binding SourceFooter }" IsVisible="{Binding SourceFooter, Converter={StaticResource StringEmptyConverter} }" />
  

И тогда конвертер выглядит следующим образом:

     public class StringEmptyConverter : IValueConverter {

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
            return !String.IsNullOrWhiteSpace(((string)value));
        }

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

Конвертер просто возвращает false, если строка содержит пробел или null.

Чтобы использовать его в качестве StaticResource, конечно, вам также придется добавить строку в ResourceDictionary в файле App.xaml.

             <converters:StringEmptyConverter x:Key="StringEmptyConverter" />
  

Второй вариант: DataTrigger

Триггеры могут изменять свойства визуального элемента. Как следует из названия: они запускаются, когда определенное свойство ( SourceFooter ) равно определенному значению ( "" ).

 <t:FooterTemplate Text="{Binding SourceFooter}" >
 <t:FooterTemplate.Triggers>
   <DataTrigger
    Binding="{Binding SourceFooter}"
    TargetType="t:FooterTemplate"
    Value="">
        <Setter Property="IsVisible" Value="false" />
    </DataTrigger>
 </t:FooterTemplate.Triggers>
</t:FooterTemplate>
  

Что я использую?

В этом случае вам следует обратиться к Converter решению. Вероятно, вы собираетесь проверять, является ли строка пустой где-то еще в вашем приложении. На мой взгляд, DataTriggers могут быть полезны для более экзотических «триггеров».