更新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>

更新List< object>在代码隐藏和强制XAML中的绑定更新

要让Datagrid知道列表中的变化(例如add()或remove()),你必须使用ObservableCollection

如果你想通知DataGrid关于列表内部的变化(例如改变属性),在DataGrid中显示的类必须实现INotifyPropertyChanged接口

使用ObservableCollection代替List

ItemsControl跟踪收集变化(添加/移除/重置/移动)与INotifyCollectionChanged接口,所以如果你想ItemsControl自动更新,你需要在列表上实现这个接口。WPF已经包含实现此接口的泛型集合。

代替

List<BitmapImage> listOfImages

ObservableCollection<BitmapImage> listOfImages

应该可以