1

我试图为从数据库返回的每个 Filetype显示Image一个。ListBox下面是我正在使用的代码。我认为我的问题是我试图将一个属性从 db 传递给 DirectoryInfo 属性。一切都是正确的,直到我到达FileImage = di.GetFiles(); 然后我得到一个异常,在 bin 文件夹中找不到文件。实现这一目标的最佳方法是什么?感谢您的任何回复。

转换器与其他转换器一起存储在一个文件夹中(不在代码后面)。

public class ConvertFileImage : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value as string == string.Empty) return null;

            var file = @"Media/file_" + value.ToString().Substring(1) + ".png";
            ImageSource src = new BitmapImage(new Uri(file, UriKind.Relative));
            return src;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

存储数据库中文件的类

public class FilesFromDb
{
     public int Id { get; set; }
     public byte[] Data { get; set; }
     public string FileName { get; set; }
}

列表框绑定到的属性

public ObservableCollection<FilesFromDb> Files
{
     get
     {
          return mFiles;
     }
}

从文件名中获取图像的属性

public FileInfo[] FileImage { get; set; }

我正在尝试使用 foreach 循环从数据库中获取文件名并将其用于目录,但我在这里失败了。

foreach (var imagetype in Files)
                    {
                        var di = new DirectoryInfo(imagetype.FileName);
                        FileImage = di.GetFiles();


                    }

然后我绑定到 xaml 中的转换器

<converters:ConvertFileImage x:Key="ConvertFileImage"/>

这是在列表框项模板中,列表框 ItemsSource="{Binding Files}"

 <Grid Grid.Row="0" Grid.RowSpan="2" Grid.Column="0">
      <Image Source="{Binding Extension, Converter={StaticResource ConvertFileImage}}"  HorizontalAlignment="Left" />
  </Grid>

如果文件存储在本地,我可以使用这样的东西

 var di = new DirectoryInfo("c:/FilesFolder");  // I think that would work, but not using a property from db
4

1 回答 1

2

在重新阅读了你的问题几次之后,我想我明白你想去哪里了。我相信你ConvertFileImage应该看起来更像这样:

public class ConvertFileImage : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     {
         if (value as string == string.Empty) return null;

         var file = @"Media/file_" + Path.GetExtension(value.ToString()) + ".png";
         ImageSource src = new BitmapImage(new Uri(file, UriKind.Relative));
         return src;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
            throw new NotImplementedException();
    }
}

然后你的绑定应该只传入文件名:

<Grid Grid.Row="0" Grid.RowSpan="2" Grid.Column="0">
    <Image Source="{Binding FileName, Converter={StaticResource ConvertFileImage}}"  HorizontalAlignment="Left" />
</Grid>
于 2013-06-10T22:32:32.363 回答