2017-11-21 1 views
0

ListViewでは、いくつかのイメージとテキストを表示する必要があります。Image.Sourceが空の場合にのみテキストを表示します。実行する方法?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

これはxamlコンバータを使用して処理できます。

コンバーターを追加し、ページ内のキーを定義します。あなたのリストにはXAMLページ

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

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

Converterクラスコード

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

これは、指定された文字列にあなたのタイトルを設定します。

これが役に立ちます。

+0

'Image.Source'が空の場合は、タイトルを変更できない、唯一のレンダリング' TextBlock'、 'Image'をレンダリングしない – HeroWong

+0

News.Add(新しいNormalNews {タイトル="タイトル1 "、サムネイル=" http://a.com/test.jpg "}); News.Add(新しいNormalNews {タイトル= "タイトル2"、サムネイル= ""});なぜこのコードが実行を停止したかに関する特定のエラー? –

+0

App.g.i.cs 'global :: System.Diagnostics.Debugger.Break();'で停止しました。 'Image.Soucre =" "' – HeroWong

関連する問題