我的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;
我在这里做错了什么?
答案 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一起使用。