#.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}}" />