0

我有一个带有一些图像的列表框。我只想在添加项目时单击刷新按钮后刷新列表框。这是我的代码。

   public class img
    {
        public BitmapImage Imgs { get; set; }
    }


public void getImages()
    {
        try
        {
            MediaLibrary mediaLibrary = new MediaLibrary();
            var pictures = mediaLibrary.Pictures;
            foreach (var picture in pictures)
            {
                BitmapImage image = new BitmapImage();
                image.SetSource(picture.GetImage());
                img mediaImage = new img();
                mediaImage.Imgs = image;
                imageList.Items.Add(mediaImage);
            }

        }
        catch (Exception ex)
        {

        }

    }

单击刷新按钮后,我正在调用 get images() ,但它不工作......是否有可能没有可观察的集合。这是我的 xaml==

<ScrollViewer x:Name="Sc" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Auto" Height="550" >
           <ListBox Name="imageList" Height="617"  HorizontalAlignment="Left" Style="{StaticResource ListBoxStyle1}" SelectionChanged="imageList_SelectionChanged" >

                    <ListBox.ItemTemplate>

                    <DataTemplate>
                          <Image Source="{Binding Imgs}" Width="100" Height="100"/>

                    </DataTemplate>

                </ListBox.ItemTemplate>
                </ListBox>
        </ScrollViewer>
4

1 回答 1

0

每当您尝试刷新列表框时,您都会调用 getImages() 方法,该方法仍会与现有列表一起再次添加列表。这将在列表框中创建一个重复的项目。

每次刷新时更新列表框的最佳解决方案是将集合绑定到 Listbox.ItemSource。如果您不想使用 Observable 集合和 INotifyProperty Changed 接口,您至少应该在从后面的代码刷新数据时将集合设置为 ListBox.ItemSource。

代码片段:

 MediaLibrary mediaLibrary = new MediaLibrary();
 var pictures = mediaLibrary.Pictures;

List<img> Images = new List<img>();

            foreach (var picture in pictures)
            {
                BitmapImage image = new BitmapImage();
                image.SetSource(picture.GetImage());
                img mediaImage = new img();
                mediaImage.Imgs = image;
                Images.Items.Add(mediaImage);
            }
imageList.ItemsSource = Images;

希望这将帮助您解决您的问题。如果它解决了您的问题,请标记为答案。

谢谢,卡马尔。

于 2013-08-10T14:34:14.717 回答