Ну, я шел вперед и кодировал ряд функций для решения проблемы. Это проверяет заголовок сначала, затем пытается загрузить изображение в блоке попытки/выгоды. Это только проверяет на GIF, BMP, JPG и файлы PNG. Можно легко добавить больше типов путем добавления заголовка к imageHeaders.
static bool IsValidImage(string filePath)
{
return File.Exists(filePath) && IsValidImage(new FileStream(filePath, FileMode.Open, FileAccess.Read));
}
static bool IsValidImage(Stream imageStream)
{
if(imageStream.Length > 0)
{
byte[] header = new byte[4]; // Change size if needed.
string[] imageHeaders = new[]{
"\xFF\xD8", // JPEG
"BM", // BMP
"GIF", // GIF
Encoding.ASCII.GetString(new byte[]{137, 80, 78, 71})}; // PNG
imageStream.Read(header, 0, header.Length);
bool isImageHeader = imageHeaders.Count(str => Encoding.ASCII.GetString(header).StartsWith(str)) > 0;
if (isImageHeader == true)
{
try
{
Image.FromStream(imageStream).Dispose();
imageStream.Close();
return true;
}
catch
{
}
}
}
imageStream.Close();
return false;
}
Свойство ItemsSource имеет тип IEnumerable. CollectionViewSource не является IEnumerable. Свойство View CollectionViewSource предоставит вам IEnumerable.
Когда вы выполняете привязку к CollectionViewSource, привязка достаточно умен, чтобы захватить свойство View и фактически привязать к нему. Может быть, в CollectionViewSource есть [DefaultBindingProperty].
Это сводится к тому факту, что при прохождении Binding вы на самом деле привязываетесь не к CollectionViewSource, а к его свойству View.
Когда вы выполняете привязку к CollectionViewSource, привязка достаточно умен, чтобы захватить свойство View и фактически привязаться к нему. Может быть, в CollectionViewSource есть [DefaultBindingProperty].
Это сводится к тому факту, что при прохождении Binding вы на самом деле привязываетесь не к CollectionViewSource, а к его свойству View.
Когда вы выполняете привязку к CollectionViewSource, привязка достаточно умен, чтобы захватить свойство View и фактически привязаться к нему. Может быть, в CollectionViewSource есть [DefaultBindingProperty].
Это сводится к тому факту, что при прохождении Binding вы на самом деле привязываетесь не к CollectionViewSource, а к его свойству View.