我有一个带有一些图像的列表框。我只想在添加项目后单击刷新按钮后刷新列表框。 这是我的代码。
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)
{
}
}
点击刷新按钮后iam调用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>
答案 0 :(得分: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;
希望这可以帮助您解决问题。如果它可以解决您的问题,请标记为答案。
谢谢, 哈拉。