Sub ItemsControl не показывает картинки - PullRequest
0 голосов
/ 29 июня 2018

У меня есть ListView, элементы которого содержат вложенный ItemsControl с некоторыми TextBlocks и Image Control.

    private string _PicturePreview;
    public string PicturePreview { get => _PicturePreview; set => _PicturePreview = value; }

Теперь я изменил источник ListView на CollectionViewSource, чтобы сгруппировать элементы. Все прекрасно воспроизводит даже изображения в ListView, но по какой-то причине изображения во вложенном ItemsControl больше не загружаются. Когда я переключаюсь обратно на прямую привязку без CollectionViewSource, изображения загружаются правильно.

Кто-то знает почему?

    <UserControl.Resources>

    <CollectionViewSource x:Key="Sales" Source="{Binding Bestellungen}" >

        <CollectionViewSource.GroupDescriptions>

            <PropertyGroupDescription PropertyName="OrderTyp"/>

        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>

</UserControl.Resources>

<ListView Name="OrdersListView" Grid.Row="1" 
              ItemsSource="{Binding Source={StaticResource Sales}}"            
              SelectedItem="{Binding SelectedBestellung}" 
              AlternationCount="2" 
              IsSynchronizedWithCurrentItem="True" 
              ScrollViewer.CanContentScroll="False"
              >

        <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <Expander IsExpanded="True" >

                                        <Expander.Header>

                                            <DockPanel Background="#162270"  Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Expander}}, Path=ActualWidth}" >
                                                <TextBlock FontWeight="Bold" FontSize="24" Foreground="White" Text="{Binding Path=Name}" Margin="10" />


                                            </DockPanel>
                                        </Expander.Header>
                                        <Expander.Content>
                                            <ItemsPresenter />
                                        </Expander.Content>
                                    </Expander>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </ListView.GroupStyle>

        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Style.Triggers>
                    <Trigger Property="ItemsControl.AlternationIndex"  Value="0">
                        <Setter Property="Background" Value="White" />
                    </Trigger>
                    <Trigger Property="ItemsControl.AlternationIndex"  Value="1">
                        <Setter Property="Background" Value="#f2f2f2" />

                    </Trigger>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="BorderThickness" Value="2"/>
                        <Setter Property="BorderBrush" Value="Red"/>
                    </Trigger>
                </Style.Triggers>

                <Setter Property="FontSize" Value="16"/>
                <Setter Property="BorderBrush" Value="Black"></Setter>
                <Setter Property="BorderThickness" Value="0,0,0,2"></Setter>
                <Setter Property="VerticalContentAlignment" Value="Top"/>
                <Setter Property="FrameworkElement.Margin" Value="5"/>
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.View>
            <GridView>
                <GridView.Columns>

                    <GridViewColumn Header="Order">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Belegnummer}" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>


                    <GridViewColumn Header="Positionen" Width="800">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ItemsControl ItemsSource="{Binding Positionen}" >
                                    <ItemsControl.ItemTemplate>
                                        <DataTemplate>
                                            <Grid Margin="0,0,10,5">

                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="50" />
                                                    <ColumnDefinition Width="auto" />
                                                </Grid.ColumnDefinitions>

                                                <Image Width="50" Height="50" Source="{Binding PicturePreview, IsAsync=True}"/>
                                                <StackPanel Grid.Column="1" Orientation="Vertical">

                                                    <DockPanel>
                                                        <TextBlock Text="Stück: " FontWeight="Bold" FontSize="18"/>
                                                        <TextBlock Text="{Binding Stück, StringFormat=N0}" FontWeight="Bold" FontSize="18"/>
                                                    </DockPanel>

                                                </StackPanel>

                                            </Grid>
                                        </DataTemplate>
                                    </ItemsControl.ItemTemplate>
                                </ItemsControl>

                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

                    <GridViewColumn >
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Vertical">
                                    <Image Source="{Binding VersandartNummer, Converter={StaticResource StringToBitmapConverter}}" MaxHeight="100" MaxWidth="100"/>

                                </StackPanel>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>


                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

1 Ответ

0 голосов
/ 29 июня 2018

Не уверен, почему именно настройка IsAsync=True не будет работать в сочетании с CollectionViewSource, но устанавливать его в любом случае бессмысленно. Получатель вашего PicturePreview вообще не занимает много времени, поэтому нет необходимости вызывать его асинхронно.

Так что просто удалите IsAsync из привязки:

 <Image ... Source="{Binding PicturePreview}"/>

Обратите внимание, что встроенное преобразование типов из строки в ImageSource создает BitmapFrame, который уже загружается асинхронно в случае, если строка URL ссылается на веб-ресурс.

...