WPF Image UriSource, привязка данных и кеширование - PullRequest
3 голосов
/ 11 ноября 2011

У меня есть это в настоящее время работает для образа WPF с привязкой к данным:

<Image Source="{Binding ThumbFile}" />

Простое достаточно.

Теперь, добавляя кеширование в это изображение (я хочу иметь возможность манипулировать / удалятьлокальный файл после его загрузки).Я обнаружил, что вы можете добавить CacheOption = "OnLoad" к тегу внутри.

<Image>
    <Image.Source>
        <BitmapImage UriSource="{Binding Path=ThumbFile, Converter={StaticResource myConverter2}}"  />
    </Image.Source>
</Image>

Затем мне нужно было иметь конвертер для преобразования локального файла в BitmapImage.

<local:LocalUriToImageConverter x:Key="myConverter2"/>

и

public class LocalUriToImageConverter : System.Windows.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
        {
            return null;
        }

        if (value is string)
        {
            value = new Uri((string)value);
        }

        if (value is Uri)
        {
            System.Windows.Media.Imaging.BitmapImage bi = new System.Windows.Media.Imaging.BitmapImage();
            bi.BeginInit();
            //bi.DecodePixelWidth = 80;
            bi.DecodePixelHeight = 60;                
            bi.UriSource = (Uri)value;
            bi.EndInit();
            return bi;
        }

        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

По некоторым причинам это даже не начинает работать.Там нет ошибок, но контроль не кажется связанным.Точки останова как в свойстве get свойства ThumbFile, так и в Converter не достигаются, даже если в элементе управления создано много экземпляров.Переключение обратно на другой тег Image Source работает нормально.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2014

У меня была такая же проблема, и я никогда не находил способ заставить привязку работать с любым конвертером при использовании в свойстве UriSource BitmapImage.Я предположил, что это не значит, что его нужно использовать.

Однако я считаю, что следующий код эквивалентен и должен работать в вашем случае (работал в моем):

<Image Source="{Binding ThumbFile, Converter={StaticResource myConverter2}}" />
0 голосов
/ 11 ноября 2011

Я не могу сказать из вашего кода, что происходит, но я бы использовал Snoop , чтобы углубиться в него и посмотреть, что происходит. Вы должны быть в состоянии увидеть любые ошибки привязки и увидеть, что DataContext находится на Image и убедиться, что свойство ThumbFile в вашем DataContext имеет то, что вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...