过滤XAML

时间:2017-05-26 14:04:23

标签: c# xaml uwp

我正在制作一个UWP应用,可以调用Web服务并显示数据。我将响应JSON反序列化为C#类并将其存储在ObservableCollection中。我的XAML页面上有一个ListView,它绑定到这个XAML。

但问题是响应JSON有时可能包含某些键的null。在这种情况下,我只想要XAML代码省略绑定为空值的TextBlocks。我如何实现这一目标?

这是我的XAML的片段

<TextBlock Text="Author"/>
<TextBlock Text="{x:Bind Author}"/>

<TextBlock Text="Education Level"/>
<TextBlock Text="{x:Bind EducationLevel}"/>

其中一些{x:Bind XXX}值可能为null,我希望不显示此类字段。

2 个答案:

答案 0 :(得分:3)

你需要一个转换器类。

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

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

然后在您的Page资源中实现转换器:

<local:NullStringToVisibilityConverter x:Key="NullStringToVisibilityConverter" />

使用Visibility属性绑定更新您的xaml:

<TextBlock Text="Author" Visibility="{x:Bind Author, Converter={StaticResource NullStringToVisibilityConverter}}" />
<TextBlock Text="{x:Bind Author}" Visibility="{x:Bind Author, Converter={StaticResource NullStringToVisibilityConverter}}" />

<TextBlock Text="Education Level" Visibility="{x:Bind EducationLevel, Converter={StaticResource NullStringToVisibilityConverter}}"/>
<TextBlock Text="{x:Bind EducationLevel}" Visibility="{x:Bind EducationLevel, Converter={StaticResource NullStringToVisibilityConverter}}"/>

答案 1 :(得分:2)

听起来你需要实现一个NullToVisibilityConverter,这样你就可以隐藏将被绑定为null的TextBlock。请按照相关问题中的示例进行操作:

NullToVisibilityConverter make visible if not null