Mam to następujące ui: Wpisz opis obrazu tutaj

Po kliknięciu listbox w lewo, gdzie mówi "Wiedeń Tour"; Po prawej powinien pokazać obraz. Wróciłem do źródła obrazu w następujący sposób:

<Image Grid.Row="1" Source="{Binding (vm:MainViewModel.AddTourViewModel).SelectedTour.RouteImage, Converter={StaticResource AddTourViewModel}}"/>

Problem, który mam teraz, jest, ścieżka obrazu jest poprawna, ale w interfejsie użytkownika sam się nie pokazuje.

W ten sposób konwertuję obraz w moim ViewModel:

   public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value != null
                ? new BitmapImage() { UriSource = new Uri(value.ToString(), UriKind.Relative) }
                : new BitmapImage() { UriSource = new Uri("error.jpg", UriKind.Relative) };

        }

Wartość po kliknięciu "Vienna Tour" wskazuje na ścieżkę obrazu, jak widać na poniższym rysunku:

enter image description here

0
TheWaII 13 kwiecień 2021, 12:36

1 odpowiedź

Najlepsza odpowiedź

Bitmapimage implementuje interfejs ISupportInitialize, co oznacza, że po zainicjowaniu bitmapimage przez ustawienia jego UriSource właściwość, musisz wywołać metody {x3}} i EndInit().

Dla wygody znajduje się konstruktor z parametrem Uri:

public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture)
{
    return value != null 
        ? new BitmapImage(new Uri(value.ToString(), UriKind.Relative)) 
        : new BitmapImage(new Uri(@"error.jpg", UriKind.Relative));
}

Alternatywnie, użyj klasy bitmapframe:

public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture)
{
    return value != null 
        ? BitmapFrame.Create(new Uri(value.ToString(), UriKind.Relative)) 
        : BitmapFrame.Create(new Uri(@"error.jpg", UriKind.Relative));
}
1
Clemens 13 kwiecień 2021, 14:42