2010-09-17 8 views
1

J'ai défini un DataTemplate pour ListView pour afficher les détails de fileInfo. Ce est le DataTemplateWpf DataTemplate

<DataTemplate x:Key="srchFileListTemplate"> 
    <StackPanel> 
     <WrapPanel> 
      <TextBlock FontWeight="Bold" FontFamily="Century Gothic" 
       Text="FileName :"/> 
      <TextBlock Margin="10,0,0,0" FontWeight="Bold" 
       FontFamily="Century Gothic" Text="{Binding Path=Name}"/> 
     </WrapPanel> 
     <WrapPanel> 
      <TextBlock FontFamily="Century Gothic" Text="FilePath :"/> 
      <TextBlock Margin="20,0,0,0" FontFamily="Century Gothic" 
       Text="{Binding Path = DirectoryName}"/> 
     </WrapPanel> 
     <WrapPanel> 
      <TextBlock FontFamily="Century Gothic" Text="File Size :"/> 
      <TextBlock Margin="20,0,0,0" FontFamily="Century Gothic" 
       Text="{Binding Path = Length}"/> 
      <TextBlock Text="Bytes"/> 
     </WrapPanel> 
     <WrapPanel> 
      <TextBlock FontFamily="Century Gothic" Text="File Extension:"/> 
      <TextBlock Margin="20,0,0,0" FontFamily="Century Gothic" 
       Text="{Binding Path = Extension}"/> 
     </WrapPanel> 
    </StackPanel> 
</DataTemplate> 

ImagesSource pour le ListView est List<FileInfo>

Je dois ajouter une icône personnalisée en fonction de l'extension du fichier à la liste. Est-il possible de passer l'extension à une méthode pour obtenir le chemin de l'icône dans le DataTemplate existant?

Répondre

2

Vous avez besoin d'un convertisseur:

[ValueConversion(typeof(string), typeof(ImageSource))] 
public class FileIconConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string fileName = value as string; 
     if (fileName == null) 
      return null; 
     return IconFromFile(fileName); 
    } 

    private ImageSource IconFromFile(string fileName) 
    { 
     // logic to get the icon based on the filename 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     // The opposite conversion doesn't make sense... 
     throw new NotImplementedException(); 
    } 

} 

Vous devez ensuite déclarer une instance du convertisseur des ressources:

<Window.Resources> 
    <local:FileIconConverter x:Key="iconConverter" /> 
</Window.Resources> 

Et vous l'utilisez dans votre reliure comme suit:

<Image Source="{Binding FullName, Converter={StaticResource iconConverter}}" /> 
+0

Le problème que j'ai avec la source de l'image n'est pas statique, je dois obtenir la source de l'image en fonction de l'extension et avoir à clude l'image dans le datatemplate pour le listview – sugirthini

+0

Je ne comprends pas votre commentaire ... qu'entendez-vous par "inclure l'image dans le datatemplate"? –