我如何才能使控件仅在绑定值不是空白时才可见?

时间:2019-03-07 00:36:56

标签: xaml xamarin xamarin.forms

我有这个XAML:

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

对象具有边距和颜色。

如果SourceFooter的值=“”,如何使用IsVisible使它不可见?

我想做类似的事情:

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

但是我知道那是不可能的。

1 个答案:

答案 0 :(得分:0)

第一个选项:转换器

您可以为此使用转换器。例如:

 <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();
        }
    }

如果字符串为空格或null,则转换器仅返回false。

要将其用作StaticResource,当然,您还必须在App.xaml文件的ResourceDictionary中添加一行。

            <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对于更奇特的“ Triggers”很有用。