更新List< object>在代码隐藏和强制XAML中的绑定更新
本文关键字:更新 XAML 绑定 隐藏 List object 代码 | 更新日期: 2023-09-27 17:52:12
我有一个用5个随机图像填充列表的方法。该方法将正确返回。当我调用该方法来填充代码隐藏中的this.InitializeComponent();
之前的List时,图像出现在屏幕上。然而,当我随后调用该方法时,它对屏幕上显示的内容没有影响。我能做些什么来解决这个问题?似乎我需要调用RaisePropertyChanged()
或者其他类似的东西,但是我找不到这样做的方法。有谁能帮忙吗?
在我的代码后面,我有这样的代码:
public List<BitmapImage> listOfImages { get; set; }
private async void Get_Images(object sender, RoutedEventArgs e)
{
//code to get 5 random images
IReadOnlyList<StorageFile> fileList = await query.GetFilesAsync();
listOfImages = new List<BitmapImage>();
foreach (StorageFile file in fileList)
{
BitmapImage src = new BitmapImage();
src.SetSource(await file.OpenAsync(FileAccessMode.Read));
listOfRelatedImages.Add(src);
}
}
在我的XAML中:
<ItemsControl ItemsSource="{Binding Path=listOfImages}" HorizontalContentAlignment="Stretch">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel VerticalAlignment="Center">
<Image x:Name="images" Source="{Binding}" Visibility="Visible" Stretch="Fill">
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
要让Datagrid知道列表中的变化(例如add()或remove()),你必须使用ObservableCollection
如果你想通知DataGrid关于列表内部的变化(例如改变属性),在DataGrid中显示的类必须实现INotifyPropertyChanged接口
使用ObservableCollection代替List
ItemsControl跟踪收集变化(添加/移除/重置/移动)与INotifyCollectionChanged接口,所以如果你想ItemsControl自动更新,你需要在列表上实现这个接口。WPF已经包含实现此接口的泛型集合。
代替List<BitmapImage> listOfImages
ObservableCollection<BitmapImage> listOfImages
应该可以