2017-03-23 13 views
0

現在、プレースホルダイメージ、実イメージの2つのイメージがあります。実際の画像のサムネイルパスが利用可能な場合は、プレースホルダ画像を非表示にします。したがって、私はData Triggersを使用すると考えていた:データトリガ:データがある場合はプレースホルダを非表示にする

<Image x:Name="placeholder" Aspect="AspectFit" HorizontalOptions="Center" WidthRequest="60" IsVisible="False"> 
    <Image.Triggers> 
     <DataTrigger TargetType="Image" 
        Binding="{Binding ThumbnailFilePath}" 
        Value="{x:Null}"> 
      <Setter Property="IsVisible" Value="True" /> 
     </DataTrigger> 
     <DataTrigger TargetType="Image" 
        Binding="{Binding ThumbnailFilePath, Path=Text.Length}" 
        Value="0"> 
      <Setter Property="IsVisible" Value="True" /> 
     </DataTrigger> 
    </Image.Triggers> 
</Image> 
<Image x:Name="preview" Aspect="AspectFit" HorizontalOptions="Center" WidthRequest="60" Source="{Binding ThumbnailFilePath, Converter ={StaticResource ImageSourceConverter}}"/> 

私はこれを行う場合は私のリストビュー内のいくつかの項目はすべて(ThumbnailFilePath = null;)で何のイメージを持っていません。いくつかの場合、プレースホルダの中にはサムネイルが表示されます。チェックする条件がいくつかあるため、プレースホルダのソースはコードで設定されています。リストビューでスクロールすると(項目が見えなくなってから戻る)、プレースホルダが表示されます。パスが更新された場合

2枚の画像がそれに応じて表示されなければならない:

ThumbnailFilePath = null; 
ThumbnailFilepath = "path/to/file.jpg"; 

所望の作用:プレースホルダが消えるべきサムネイルが表示されるべきです。アクション希望

ThumbnailFilePath = "old/path/to/file.jpg"; 
ThumbnailFilepath = "path/to/file.jpg"; 

:プレースホルダは、隠された滞在する必要があり、新しいサムネイルが表示されるはずです。

ThumbnailFilePath = "path/to/file.jpg"; 
ThumbnailFilepath = null; 

目的のアクション:プレースホルダはvisisbleする必要があり、サムネイルを非表示にする必要があります。

これはデータトリガーで管理できますか?どうやって?

コード(コードビハインドファイル)で可視性を設定しようとしましたが、リストビュー内の項目は更新されません(プレースホルダが表示されます。サムネイルが利用可能でも、リスト内をスクロールするだけで、 )。

私はバインディングを持っているし、私は、コード内で画像のソースを変更する場合ので、また、私は今、私はView-To-View Bindingsを使用

答えて

0

...結合がなくなって、プレースホルダを使用します。

<Image x:Name="placeholder" 
     BindingContext="{x:Reference Name=preview}" 
     Aspect="AspectFit" 
     HorizontalOptions="Center" 
     WidthRequest="60" 
     IsVisible="{Binding Path=Source, Converter ={StaticResource IsNullConverter}"> 
<Image x:Name="preview" 
     Aspect="AspectFit" 
     HorizontalOptions="Center" 
     WidthRequest="60" 
     Source="{Binding ThumbnailFilePath, Converter ={StaticResource ImageSourceConverter}}"/> 

上記はうまくいくようです。私はコード内でIsVisibleのマニュアル設定をすべて削除しなければなりませんでした。ここで

は、私が使用し IValueConverterです:

class IsNullOrEmptyConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value is string) 
      return string.IsNullOrEmpty((string)value); 

     return (value == null); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new InvalidOperationException("IsNullOrEmptyConverter can only be used one way."); 
    } 
} 
関連する問題