Загрузка изображения и привязка

У меня есть код для загрузки изображения в Image, привязка работает, но в рантайме выдает ошибку(не исключение, т.к. приложение не падает): Cannot convert '<null>' from type '<null>' to type 'System.Windows.Media.ImageSource' for 'en-US' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: ImageSourceConverter cannot convert from (null). Из-за этой ошибки загруженная картинка не показывается, хотя в коде для загрузки реализовал интерфейс INotifyPropertyChanged в качестве отдельного метода в отдельном классе, который вызывается в сеттере свойства, привязанного к Image. Разметка изображения:

<Image Source="{Binding _AvatarPath}" Margin="53,56,981,558"/>

Класс для загрузки изображения C#:

internal class ProfileEditor : INotifyPropertyChangedImp
{
    private readonly INotifyPropertyChangedImp propchange = new INotifyPropertyChangedImp();

    public static Uri? AvatarPath;
    public Uri? _AvatarPath
    {
        get { return AvatarPath; }
        set
        {
            AvatarPath = value;
            propchange.NotifyPropertyChanged("_AvatarPath");
        }
    }

    public static void ChangeAvatar()
    {
        OpenFileDialog fDialog = new OpenFileDialog();
        fDialog.Filter = "All supported graphics|*.jpg;*.jpeg;*.png|" +
                         "JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" +
                         "Portable Network Graphic (*.png)|*.png";
        fDialog.CheckFileExists = true;
        if (fDialog.ShowDialog() == true)
        {
            var uri = new Uri(fDialog.FileName);
            AvatarPath = uri;
        }
    }
}

Класс, реализующий интерфейс INotifyPropertyChanged:

internal class INotifyPropertyChangedImp : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler? PropertyChanged;

    internal void NotifyPropertyChanged([CallerMemberName] string? propname = null)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propname));
        }
    }
}

Изначально, метод для загрузки картинки в Image в разметке был в файле xaml.cs, позже я решил его перенести в отдельный класс.

Собственно, у меня есть несколько вопросов:

  1. Можно ли таким образом реализовывать интерфейс INotifyPropertyChanged? Возможно я его просто неправильно реализовал, подскажите пожалуйста.

  2. Какой лучше метод привязки здесь использовать? Возможно я и привязку неправильно сделал.

  3. Как все-таки избавиться от ошибки, описанной выше(Cannot convert '<null>' from type '<null>' to type 'System.Windows.Media.ImageSource' for 'en-US' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: ImageSourceConverter cannot convert from (null).). Честно, первый раз сталкиваюсь с этим, и понятия не имею что здесь нужно делать.

  4. Может ли быть все это из-за того, что в свойстве AvatarPath используется nullable?(прошу, поправьте если не так это называется) после типа данных?

Буду рад любой помощи, спасибо!


Ответы (0 шт):