当Image.Source为空时,不要渲染Image

时间:2017-11-21 04:24:26

标签: xaml uwp

在ListView中,我需要显示一些图像和文本,仅在Image.Source为空时显示文本。怎么办?

<ListView ItemsSource="{x:Bind ViewModel.News}">
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="home:NormalNews">
            <StackPanel>
                <TextBlock Text="{x:Bind Title}"/>
                <Image Source="{x:Bind Thumbnail}"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

ViewModel数据源如:

News.Add(new NormalNews{ Title = "title1", Thumbnail = "http://a.com/test.jpg" });
News.Add(new NormalNews{ Title = "title2", Thumbnail = "" });

当我尝试运行此页面时,它已停止运行。

2 个答案:

答案 0 :(得分:2)

您可以使用xaml转换器处理此问题。

添加转换器并在页面中为其定义一个键。

在XAML页面

<converter:ImageUriConverter x:Key="ImageUriConvert"/>

在您的列表中

<Image Source="{Binding Thumbnail,Converter={StaticResource ImageUriConvert}}"/>

转换器类代码

class ImageUriConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value.ToString() == string.Empty)
        {
            return new BitmapImage();
        }
        return new BitmapImage(new Uri(value.ToString()));
    }

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

答案 1 :(得分:0)

在填充ViewModel对象时,请执行以下操作:

   ViewModel.News.Add(new NormalNews{
Thumbnail=(the Thumbnail source which you will be using),
Title=(the Thumbnail source which you will be using)==""?"Your Title":""});

当缩略图源为空时,这会将您的标题设置为指定的字符串。

希望这有帮助。