1

データベースから返されたファイルタイプごとImageにを表示しようとしています。ListBox以下は私が使用しているコードです。私の問題は、プロパティをデータベースから 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