Не работает привязка к Image.Source WPF

166
28 января 2020, 12:50
<Window x:Class="project.View.AddWorkerWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:project.View"
        xmlns:local1="clr-namespace:project.Helpers"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
        mc:Ignorable="d"
        Title="AddWorkerWindow" Height="626.582" Width="831.899">
    <Window.Resources>
        <local1:ImgSourceConverter x:Key="ImgSourceConverter"></local1:ImgSourceConverter>
    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="250"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <StackPanel>
            <Image
               Margin="0 40 0 0"
               Source="{Binding ImgFile, Converter={StaticResource ImgSourceConverter}}"
               Height="200"
               Width="200"
                />

Свойство во ViewModel

private string imgFile;
public string ImgFile
{
   get { return imgFile; }
   set
   {
       imgFile = value;
       NotifyPropertyChanged();
   }
 }

Инициализирую свойство ImgFile в конструкторе ViewModel ImgFile = "../images/man.png"; При запуске приложения картинка не отображается. Когда меняю свойство ImgFile - аналогично

Вставляю тот же путь в тег <Image> Source="../images/man.png" - картинка видна

В чем может быть причина?

Answer 1

Мой Image находлися в ListView и при подстановке в Source пути из бд (строка), картинка не выводилась. Помогла конвертация в байт код и инициализация BitMap

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null)
            {
                string part = (string)value;
                string path = @"..\..\images\" + part;
                var bitmapImage = new BitmapImage();
                byte[] rawImageData = null;
                BinaryFormatter formatter = new BinaryFormatter();
                using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    rawImageData = new byte[fs.Length];
                    int count = (int)fs.Length / 1024;
                    for (int i = 0; i < count; i++)
                        fs.Read(rawImageData, i*1024, 1024);
                    int last = (int)(fs.Length - count * 1024);
                    fs.Read(rawImageData, count*1024, last);
                }
                using (var stream = new MemoryStream(rawImageData))
                {
                    bitmapImage.BeginInit();
                    bitmapImage.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
                    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
                    bitmapImage.StreamSource = stream;
                    bitmapImage.EndInit();
                }
                return bitmapImage;
            }
            return null;
        }
READ ALSO
Как получить текущий сертификат

Как получить текущий сертификат

Настроил IIS на аутентификацию по смарт-карте по данной статье https://blogjayway

176
Перемешать значения в массиве

Перемешать значения в массиве

Нужно, чтобы значения из массива всегда выводились в случайном порядкеПробовал array_rand, но эта функция перемешивает только ключи массива

145
PHP не выполняется system

PHP не выполняется system

ubuntu 18, php72 требуется выполнить Program

155
Перенос строки в сообщении Bot Telegram

Перенос строки в сообщении Bot Telegram

Аяксом выполняю простой скрипт:

144