C# UWP ObservableCollection,来自webservice的数据未更新GUI

C# UWP ObservableCollection,来自webservice的数据未更新GUI,c#,win-universal-app,observablecollection,windows-10-universal,C#,Win Universal App,Observablecollection,Windows 10 Universal,我正在listview上使用ObservableCollection。ObservaleCollection使用异步方法从web服务正确获取数据,然后对其进行解析,并使用NewsProxyParser(string thing,out ObservaleCollection newsList)方法上的Add方法填充ObservaleCollection,但我无法使用绑定的ObservaleCollection更新GUI 我是UWP新手,所以我假设异步方法运行在GUI支持的另一个线程上。如何正确地

我正在listview上使用ObservableCollection。ObservaleCollection使用异步方法从web服务正确获取数据,然后对其进行解析,并使用NewsProxyParser(string thing,out ObservaleCollection newsList)方法上的Add方法填充ObservaleCollection,但我无法使用绑定的ObservaleCollection更新GUI

我是UWP新手,所以我假设异步方法运行在GUI支持的另一个线程上。如何正确地进行绑定以使用从web服务获取的数据更新GUI

我的XAML:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ListView Name="ListViewNews" ItemsSource="{x:Bind NewsCollection, Mode=OneWay}" IsItemClickEnabled="True" ItemClick="ListView_ItemClick">
        <ListView.ItemTemplate>

            <DataTemplate x:DataType="data:News">

                <RelativePanel Margin="0,16" >
                    <Image Name="x:Thumb" Source="{x:Bind thumbnailUrl}" Width="96" Height="96" RelativePanel.AlignLeftWithPanel="True" Margin="0,0,16,0"></Image>
                    <TextBlock Name="x:Title" Text="{x:Bind title}" FontSize="22" FontWeight="Bold"  RelativePanel.RightOf="x:Thumb"></TextBlock>
                    <TextBlock Name="x:Date" Text="{x:Bind dateString}" FontSize="12" FontWeight="Light" Foreground="Gray" RelativePanel.RightOf="x:Thumb" RelativePanel.Below="x:Title"></TextBlock>
                    <TextBlock Name="x:Text" Text="{x:Bind newsText}" Foreground="Gray"  RelativePanel.RightOf="x:Thumb" RelativePanel.Below="x:Date"></TextBlock>
                </RelativePanel>

            </DataTemplate>

        </ListView.ItemTemplate>                       
    </ListView>
</Grid>

政务司司长:

public sealed partial class NewsPage : Page
{

    private ObservableCollection<News> NewsCollection;

    public NewsPage()
    {
        NewsRequest();
        this.InitializeComponent();                     
    }

    private async void NewsRequest()
    {
        //Fetch News from web
        string response =  await NewsProxy.GetNews("TokenX");
        //Parse News to add to NewsCollection
        bool success = NewsProxy.NewsProxyParser(response, out NewsCollection);

        // success is true and NewsCollection has new updated values

        if (success)
        {
            News n = new News();
            n.title = "Just to trigger collectionchanged";
            n.newsText = "dadada";
            n.order = 1;
            NewsCollection.Add(n);
            Debug.WriteLine("Still No GUI updated!!!");

        }

    }

}
公共密封部分类新闻页:第页
{
私人收集新闻;
公共新闻页()
{
NewsRequest();
this.InitializeComponent();
}
私有异步void newrequest()
{
//从网上获取新闻
string response=await NewsProxy.GetNews(“TokenX”);
//解析要添加到新闻集合的新闻
bool success=NewsProxy.NewsProxyParser(响应,输出新闻集合);
//success为true,NewsCollection具有新的更新值
如果(成功)
{
新闻n=新新闻();
n、 title=“只是为了触发collectionchanged”;
n、 newsText=“dadada”;
n、 顺序=1;
添加(n);
WriteLine(“仍然没有更新GUI!!!”;
}
}
}

ObservableCollection
仅通知集合更改,例如添加和删除项目。只要替换整个集合,就需要将
newscolection
设置为依赖项属性,以通知XAML UI有关更改的信息

public ObservableCollection<News> NewsCollection
{
    get { return (ObservableCollection<News>)GetValue(NewsCollectionProperty); }
    set { SetValue(NewsCollectionProperty, value); }
}

public static readonly DependencyProperty NewsCollectionProperty =
    DependencyProperty.Register("NewsCollection", typeof(ObservableCollection<News>), typeof(NewsPage), new PropertyMetadata(null));

private async void NewsRequest()
{
    //Fetch News from web
    string response =  await NewsProxy.GetNews("TokenX");
    //Parse News to add to NewsCollection
    ObservableCollection<News> newsCollection;
    bool success = NewsProxy.NewsProxyParser(response, out newsCollection);
    NewsCollection = newsCollection;

    // success is true and NewsCollection has new updated values

    if (success)
    {
        News n = new News();
        n.title = "Just to trigger collectionchanged";
        n.newsText = "dadada";
        n.order = 1;
        NewsCollection.Add(n);
        Debug.WriteLine("Still No GUI updated!!!");
    }
}
public-observeCollection新闻集合
{
get{return(ObservableCollection)GetValue(NewsCollectionProperty);}
set{SetValue(newscolectionproperty,value);}
}
公共静态只读从属属性NewsCollectionProperty=
DependencyProperty.Register(“NewsCollection”、typeof(ObservableCollection)、typeof(NewsPage)、new PropertyMetadata(null));
私有异步void newrequest()
{
//从网上获取新闻
string response=await NewsProxy.GetNews(“TokenX”);
//解析要添加到新闻集合的新闻
可观察的收集新闻;
bool success=NewsProxy.NewsProxyParser(响应,输出新闻集合);
新闻收集=新闻收集;
//success为true,NewsCollection具有新的更新值
如果(成功)
{
新闻n=新新闻();
n、 title=“只是为了触发collectionchanged”;
n、 newsText=“dadada”;
n、 顺序=1;
添加(n);
WriteLine(“仍然没有更新GUI!!!”;
}
}