Вопрос WPF ListBox ItemsSource StaticResource/Binding

Ну, я шел вперед и кодировал ряд функций для решения проблемы. Это проверяет заголовок сначала, затем пытается загрузить изображение в блоке попытки/выгоды. Это только проверяет на 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;
}
6
задан Philippe Lavoie 15 February 2011 в 16:08
поделиться

1 ответ

Свойство 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.

5
ответ дан 17 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: