c# - 在 XAML 中过滤空值

标签 c# xaml uwp

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

但问题是响应 JSON 有时可能包含某些键的 null。在这种情况下,我只希望 XAML 代码省略此类绑定(bind)到空值的 TextBlock。我该如何实现?

这是我的 XAML 的片段

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

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

其中一些 {x:Bind XXX} 值可以为空,我不想显示此类字段。

最佳答案

为此你需要一个转换器类。

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

然后在您的页面资源中实例化转换器:

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

并使用可见性属性的绑定(bind)更新您的 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}}"/>

关于c# - 在 XAML 中过滤空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44203603/

相关文章:

c# - 如何在 Entity Framework 迁移中获取当前连接字符串?

c# - 如何切换 TextBlock 在 DataTrigger 中的可见性?

c# - bool 到 System.Windows.Visibility(动态创建 DataGridColumnHeaders 时的绑定(bind)问题)

c# - Xamarin Forms - 将光标更改为等待光标

c# - xaml UWP 将焦点/选择设置为第一个 ListView 项

c++ - 为什么我的 UWP 游戏在发布时比在 Debug模式下慢?

c# - 我想过滤选择列表。我希望下拉菜单仅显示与预定类(class)注册同一类(class)的学生

c# - sqldatareader 中的括号

c# - 防止不必要的字段访问的样式指南

c# - 如何在 ListView 中将网格嵌套到网格中