WPF problem z bindowaniem ImageSource

0

Pomimo poprawnej inicjalizacji ImageSource żaden obrazek nie jest wyświetlany:

Metoda do wczytywania.

        public static async Task<ImageSource> ReadCoverImageAsync(this VersOne.Epub.EpubBookRef bookRef)
        {
            BitmapImage image = null;
            byte[] content = await bookRef.ReadCoverAsync();
            
            if (content != null)
            {
                using (MemoryStream coverImageStream = new MemoryStream(content))
                {
                    image = new BitmapImage();
                    image.BeginInit();
                    image.StreamSource = coverImageStream;
                    image.EndInit();
                }
            }

            return image;
        }

View:

        <ListView x:Name="BookContainer" Grid.Row="1" BorderThickness="0" ItemsSource="{Binding Books}" Background="{DynamicResource BackgroundBrush}" Width="235" Margin="0,0,25,0">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Border BorderBrush="{DynamicResource BackgroundBrushDark}" BorderThickness="3" Background="{DynamicResource BackgroundBrushLight}" Width="210" Height="265" Margin="0,0,0,25">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="25"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="25"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="20"/>
                                <RowDefinition Height="20"/>
                                <RowDefinition Height="*"/>
                                <RowDefinition Height="20"/>
                                <RowDefinition Height="35"/>
                                <RowDefinition Height="20"/>
                            </Grid.RowDefinitions>

                            <TextBlock Text="{Binding Metadata.Title}" Grid.Row="1" Grid.Column="1"/> <!-- Wyświetlany prawidłowo -->
                            <Image Source="{Binding Metadata.Cover}" Grid.Row="2" Grid.Column="1"/> <!-- !!! Tutaj !!! -->
                            <Button Content="Read" Grid.Row="4" Grid.Column="1"
                                        Style="{DynamicResource ThemedButton}"
                                        Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext.ReadBookCommand}"
                                        CommandParameter="{Binding}"
                                    />
                        </Grid>
                    </Border>
                </DataTemplate>
            </ListView.ItemTemplate>

            <ListView.Style>
                <Style TargetType="{x:Type ListView}">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Visible"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="False">
                            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ListView.Style>
            <ListView.Resources>
                <Style TargetType="{x:Type ListViewItem}">
                    <Setter Property="BorderThickness" Value="0"/>
                    <Setter Property="Padding" Value="0"/>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">

                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ListView.Resources>
        </ListView>

Metadata.Cover jest typu System.Windows.Media.Imaging.BitmapImage (sprawdzałem przed samym dodaniem do kolekcji), ma poustawiane wartości pól PixelWidth, PixelHeight.
Ścieżka bindowania jest poprawna bo Metadata.Title jest wyświetlany prawidłowo, jakieś pomysły czemu obrazek nie jest wyświetlany?

0
Krwawy Szczur napisał(a):

może to Ci pomoże

https://stackoverflow.com/questions/3427034/using-xaml-to-bind-to-a-system-drawing-image-into-a-system-windows-image-control

Nie bardzo, u mnie jest poprawy typ(System.Windows.Media.ImageSource) który chcę bindować, więc konwerter też mi nic nie daje.

1

Zamiast masy nie potrzebnego xaml'a(w któym mniej niż 2% testu jest związane z pytaniem) i jakieś metody która bóg jeden wie jak i gdzie jest wywołana, wkleił byś view model i kod który go inicjalizuje. A jak byś w kleił to w uproszczonej wersji to już ogóle było by super i prawdopodobnie rozwiązałbyś problem sam, 90% problemów z wpf'em można szybko rozwiać testując na hello wordach bo nie trzeba się bawić marnować czasu na cala otoczkę.

A co do pytania ustawiasz image.StreamSource = coverImageStream; jako source a chwile potem (wychodząc z boku using) goDispose'ujesz, dlatego obrazek jest pusty a równocześnie znasz rozmiar w pixcel'ach ;).

1 użytkowników online, w tym zalogowanych: 0, gości: 1