在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 = "" });
当我尝试运行此页面时,它已停止运行。
答案 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":""});
当缩略图源为空时,这会将您的标题设置为指定的字符串。
希望这有帮助。