UriSource изображения WPF, Привязка данных и кэширование

#.net #wpf #xaml #data-binding

#.net #wpf #xaml #привязка данных

Вопрос:

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

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

Достаточно просто.

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

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

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

 <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, так и в конвертере не достигаются, даже несмотря на то, что в элементе управления создано много экземпляров. Переключение обратно на другой тег источника изображения работает нормально.

Комментарии:

1. В вашем окне вывода ничего нет? Неудачные привязки и т.д. …?

2. Вообще ничего. Было много разных ошибок, через которые я прошел, пытаясь добиться того, чтобы это сработало, но затем оно, наконец, перестало выдавать ошибки, хотя на самом деле все еще не работало.

Ответ №1:

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

Ответ №2:

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

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

 <Image Source="{Binding ThumbFile, Converter={StaticResource myConverter2}}" />