如何从静态类更新列表框

本文关键字:列表 更新 静态类 | 更新日期: 2023-09-27 18:33:30

我的 XAML 标记是

   <Grid x:Name="gdTest" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  Margin="5,0,5,0" >
       <ListBox Width="400" Margin="10" x:Name="lstDemo">
          <ListBox.ItemTemplate>
             <DataTemplate>
                <StackPanel Orientation="Horizontal">
                   <TextBlock Text="{Binding Path=id}" Margin="20" />
                   <TextBlock Text="{Binding Path=name}" Margin="20"/>
                </StackPanel>
             </DataTemplate>
          </ListBox.ItemTemplate>
        </ListBox>
   </Grid>

我的超级类是

public class SuperClass
    {
        public Arguments arguments;
        public class Stat
        {
            public int downloadCount;
        }
        public class Files
        {
            public int id;
            public string name;
            public List<Stat> SomeStats;
        }
        public class Arguments
        {
            public List<Files> Files;
        }
    }

在应用程序类中,我将我的超类声明为静态。(App.SuperClass以调度计时器的间隔填充)。

public partial class App : Application
{
   public static SuperClass SuperClass = new SuperClass();
}

最后,当我将静态类的列表绑定到 ListBox 时,模拟器中不显示任何内容。

lstDemo.ItemsSource = App.SuperClass.arguments.Files;

我在这里做错了什么?

如何从静态类更新列表框

不使用公共字段,请使用自动属性。对 ItemsSource 绑定使用可观察集合,以便在发生添加/删除事件时通知列表框。

public class SuperClass 
{
    public Arguments Args { get; set; }
    public class Stat
    {
        public int DownloadCount { get; set; }
    }
    public class File
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Stat> SomeStats { get; set; }
    }
    public class Arguments 
    {
        public ObservableCollection<File> Files { get; set; }
    }
}

列表更改为 ObservableCollection。Strandard 列表集合不执行 UI 上的添加/删除通知不会更新。

public class Arguments
{
       public ObservableCollection<Files> Files;
}

此外,与其以这种方式直接设置 ItemsSource,更好的方法是将 Xaml Binding of ItemsSource 与 ViewModel 一起使用。