如何从静态类更新ListBox?

时间:2014-12-08 20:29:23

标签: c# windows-phone-8

我的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 Class中,我将SuperClass声明为静态。 (App.SuperClass以调度计时器的间隔填充。)

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

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

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

我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

使用automatic properties而不是使用公共字段。 使用ObservableCollection进行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; }
    }
}

答案 1 :(得分:0)

将列表更改为ObservableCollection。 Strandard list collection不会在UI上添加/删除通知,因为UI不会更新。

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

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