我的应用程序中有一个图像列表,它们都在列表框中,我将源代码作为URL。
一切正常,能够显示我给出的网址图片。
当我更改图片并重新加载我的ListBox
时,更改未反映在该图片上时,它会显示旧图片而不是新图片。
我确信,在图像更改后我将新图像URL绑定到源,但它显示旧图像,我无法找到为什么会发生这种情况,这里是我的代码
<ListBox Grid.Row="1" HorizontalAlignment="Left" Margin="0,81,0,0" Name="wishListListBox" VerticalAlignment="Top" Width="480" Visibility="Visible">
<ListBox.ItemTemplate>
<DataTemplate>
<Image ImageFailed="wishlistImage_ImageFailed_1" x:Name="wishlistImage" HorizontalAlignment="Left" Width="164" Margin="12,54,0,88" Stretch="Fill">
<Image.Source>
<BitmapImage CreateOptions="DelayCreation,IgnoreImageCache" UriSource="{Binding thumb_image}" />
</Image.Source>
</Image>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是我的课程,我从中为我的图片设置了itemsource
[DataContract]
public class WishListResponse : INotifyPropertyChanged
{
[DataMember]
public List<string> thumb_images { get; set; }
public string thumb_image
{
get
{
if (thumb_images.Count != 0)
return thumb_images[0];
else
return "";
}
set
{
thumb_images[0] = value;
OnPropertyChanged(thumb_images[0]);
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
在我的主页面中我像这样绑定项目来源
public static List<WishListResponse> wishlistList = new List<WishListResponse>();
wishListListBox.ItemsSource = wishlistList.ToArray();
任何人都可以帮我刷新我的图像控件。 谢谢。
答案 0 :(得分:1)
好的,谢谢你的更新: - )
首先回答您原来的问题.. ;-)如果您将List
替换为ObservableCollection
,当您更改列表条目时,它会自动更新用户界面。
public ObservableCollection<string> ThumbImages { get; set; }
现在,如果您设置了ThumbImages new,即为其分配新对象,则必须再次将DataContext设置为新引用,例如:
ThumbImages = new ObservableCollection<string>(wishListResponse.thumb_images);
DataContext = ThumbImages;
现在通常将datacontext设置为视图的模型,在您的情况下是一个字符串列表。您可以在后面的代码中设置如下的datacontext:
DataContext = ThumbImages;
然后您可以使用默认绑定引用datacontext:
<ListBox ItemsSource="{Binding}">...</ListBox>
因此,您将不再需要在WishListResponse上创建特殊属性并将ItemTemplate再次设置为Element,即在此上下文中再次使用默认绑定:
<ListBox ItemsSource="{Binding}" Grid.Row="1" HorizontalAlignment="Left" Margin="0,81,0,0" Name="wishListListBox" VerticalAlignment="Top" Width="480" Visibility="Visible">
<ListBox.ItemTemplate>
<DataTemplate>
<Image ImageFailed="wishlistImage_ImageFailed_1" x:Name="wishlistImage" HorizontalAlignment="Left" Width="164" Margin="12,54,0,88" Stretch="Fill">
<Image.Source>
<BitmapImage CreateOptions="DelayCreation,IgnoreImageCache" UriSource="{Binding}" />
</Image.Source>
</Image>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
HTH
答案 1 :(得分:1)
我在这个问题上尝试了非常简单的解决方案,它对我有用,
我每次需要刷新图像时都更改了图像链接, 这意味着我只是将当前时间附加到图片网址。
这对我来说很好。
谢谢。
答案 2 :(得分:0)
我认为代码中的更改未通知xaml,因此您必须从INotifyChange继承该类,然后进行属性更改事件...如
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
然后在
之后的列表属性集中 listname = value;
OnPropertyChanged("listname");
我希望这对你有帮助....
答案 3 :(得分:0)
一个是实现INotifyPropertyChanged;
另一个你可以这样做
wishListListBox.ItemsSource =null;
wishListListBox.ItemsSource = itemsSource;
它还会使您的列表框显示新项目
但是当itemsSource改变时它有问题你必须这样做........
希望这可以帮到你