C# 向ObservableCollection添加数据时出现问题

C# 向ObservableCollection添加数据时出现问题,c#,windows-phone-8,C#,Windows Phone 8,我试图通过在私有异步void中声明Posts类的一个新实例并填充该集合,将一些示例数据添加到一个可观察的集合中。当应用程序加载时,它不会显示内容。代码编译时没有错误/警告 如果我要在Posts()方法中添加示例数据,那么它将按预期显示 如何从我的私有异步void中填充我的可观察集合,并在应用程序启动时显示内容 XAML: C# 公共类数据2{ 公共字符串标题{get;set;} 公共字符串作者{get;set;} 公共数据2(字符串标题、字符串作者){ 这个.Title=Title; thi

我试图通过在私有异步void中声明Posts类的一个新实例并填充该集合,将一些示例数据添加到一个可观察的集合中。当应用程序加载时,它不会显示内容。代码编译时没有错误/警告

如果我要在Posts()方法中添加示例数据,那么它将按预期显示

如何从我的私有异步void中填充我的可观察集合,并在应用程序启动时显示内容

XAML:


C#

公共类数据2{
公共字符串标题{get;set;}
公共字符串作者{get;set;}
公共数据2(字符串标题、字符串作者){
这个.Title=Title;
this.Author=作者;
}
}
公共类职位:ObservableCollection{
公职人员(){
}
}
公共密封部分类主页面:第页{
公共主页(){
this.InitializeComponent();
this.NavigationCacheMode=NavigationCacheMode.Required;
GetPosts();
}
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e){
}
私有异步void GetPosts(){
试一试{
var client=新的HttpClient();
var response=await client.GetAsync(新Uri(“http://mywebsite.com/posts.json"));
var result=await response.Content.ReadAsStringAsync();
var json=ParseData(结果);
职位=新职位();
添加(新数据2(“样本标题1”、“样本作者1”);
添加(新数据2(“样本标题2”,“样本作者2”));
}
捕获(HttpRequestException hre){
系统诊断调试写线(hre);
}
捕获(例外情况除外){
系统.诊断.调试.写线(ex);
}
}
私有静态RootObject解析数据(字符串json){
返回JsonConvert.DeserializeObject(json);
}
}

我建议为“Posts”属性创建一个视图模型:

public class PostsViewModel
{
    public Posts PostData { get; private set; }

    public PostsViewModel()
    {
        PostData = new Posts();
        GetPosts();
    }

    private async void GetPosts() 
    {
        // ...
    }
}
现在,将页面的DataContext设置为视图模型的实例:

 public sealed partial class MainPage : Page {
     private readonly PostsViewModel _viewmodel;

     public MainPage() {
         this.InitializeComponent();

         this.NavigationCacheMode = NavigationCacheMode.Required;

         _viewmodel = new PostsViewModel();
     }
}
<ListView ItemsSource="{Binding Posts}"
并将ListView的ItemsSource绑定到视图模型中的属性:

 public sealed partial class MainPage : Page {
     private readonly PostsViewModel _viewmodel;

     public MainPage() {
         this.InitializeComponent();

         this.NavigationCacheMode = NavigationCacheMode.Required;

         _viewmodel = new PostsViewModel();
     }
}
<ListView ItemsSource="{Binding Posts}"
上面一行:

<ListView ItemsSource="{StaticResource Posts}"> 
不过,最好使用dynamic。 您可以将窗口数据上下文设置为
Posts
类,并执行异步调用来填充
Posts
构造函数中的数据。然后使用:

<ListView ItemsSource="{Binding Posts}">

您应该在收到响应后立即查看数据

<ListView ItemsSource="{Binding Posts}">