Изображение не отображается при привязке источника в WPF - PullRequest
0 голосов
/ 22 января 2020

Есть некоторые объяснения аналогичной проблемы, но я все еще не понимаю, что я сделал не так. У меня есть изображение в C:/Image.png.

Теперь я запустил WPF-проект в MVVM-Pattern, где у меня есть пользовательский контроль для изображения:

<Grid>
    <Grid.DataContext>
        <vm:LSImageVM/>
    </Grid.DataContext>

    <Image x:Name="Picture" Source="{Binding LSImage, NotifyOnSourceUpdated=True}"/>
</Grid>

Это Viewmodel- Класс для изображения:

public class LSImageVM : ViewModelBase
{
    private ImageSource _image;
    private LockscreenSettingsClass settings;


    public LSImageVM()
    {
        var json = File.ReadAllText("C:/Program Files/LSL/settings.json");
        settings = JsonConvert.DeserializeObject<LockscreenSettingsClass>(json);

        Uri imageUri = new Uri(settings.Path, UriKind.Relative);
        BitmapImage imageBitmap = new BitmapImage(imageUri);
        LSImage = imageBitmap;
    }

    public ImageSource LSImage
    {
        get => _image;

        set
        {
            _image = value;
            OnPropertyChanged();
        }
    }
}

Итак, я получаю свои настройки от Json, который выглядит так:

{
    "Path": "C:/Image.png",
    "Interval": 5000,
    "LogPath": "C:/Lockscreen.log"
}

Затем путь описан в настройках (C:/Image.png в данном случае) преобразуется в BitmapImage, который я использую в качестве ImageSource, который я связал в xaml выше.

В этот момент, когда я строю проект, я могу видеть изображение в своем xaml- редактор:

enter image description here

Теперь я добавляю Usercontrol в свое главное окно:

<Window x:Class="LockscreenSettings_MVVM.View.Windows.Main_Window"
        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:uc="clr-namespace:LockscreenSettings.View.UserControls"
        xmlns:local="clr-namespace:LockscreenSettings_MVVM.View.Windows"
        mc:Ignorable="d"
        Title="Main_Window" Height="500" Width="400" ResizeMode="NoResize">
    <Grid>
        <uc:LSImageUC/>
    </Grid>
</Window>

И это та точка, где я не вижу изображение при запуске программы.

Что я пропустил?

1 Ответ

2 голосов
/ 22 января 2020

C:/Image.png не является относительным URI, следовательно, UriKind.Relative неверно.

Попробуйте

LSImage = new BitmapImage(new Uri(settings.Path, UriKind.RelativeOrAbsolute));

Как примечание, установка NotifyOnSourceUpdated=True в Image.Source Связывание кажется бессмысленным, поскольку вы не используете событие SourceUpdated Связывания.

Этого достаточно:

<Image Source="{Binding LSImage}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...