Заполняю DataGrid из БД Sqlite. Все текстовые и числовые столбцы через биндинги заполняются правильно. Кроме столбца с картинками (там в БД ссылки на картинки в папке проекта):
<DataGridTemplateColumn Header="Icon">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Path=EmblemPath}" Height="20"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Но если вставить напрямую текст из БД (
Source="\Resources\Emblems\Teams\Liverpool.png"
), то картинка отображается. То есть, ссылки работают, не работает именно биндинг.
Насколько я разобрался, то понял, что проблема в том, что
Source ожидает
Uri, а получает
string. Поэтому добавил в код конвертер:
public class StringToUriConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return new Uri((string)value, UriKind.Relative);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}
Проверяю его работу кнопкой:
private void TestButton_Click(object sender, RoutedEventArgs e)
{
string a = Teams[3].EmblemPath.ToString();
StringToUriConverter stringToUriConverter = new StringToUriConverter();
var LoadedUri = (Uri)stringToUriConverter.Convert(a, typeof(BitmapImage), null, CultureInfo.CurrentCulture);
MessageBox.Show(LoadedUri.ToString());
TestImage2.Source = new BitmapImage(LoadedUri);
}
Конвертер работает - картинка подгружается к
image.
Подключаю конвертер к
image в
XAML:
<Image Source="{Binding Path=EmblemPath, Converter={StaticResource stringToUriConverter}}" Height="20"/>
Никакого эффекта - картинки всё так же не отображаются.
Вопрос:
Что в моей логике неправильно? Или может есть какой-то другой более действенный способ подгрузить пути к картинкам из БД?