Windows应用商店应用:在设计时调用异步方法

时间:2014-11-18 17:35:32

标签: c# windows asynchronous store design-time

我正在尝试使用d:DesignInstance来指定在Windows应用商店应用(win8.1)中设计时用于数据绑定的虚假数据类。

我试图从嵌入式JSON文件初始化虚假数据类。但是,它只是部分工作。我从构造函数中调用LoadData()方法。这个LoadData()是一个异步方法,但是它是同步调用的:

    public DesignTimePetitionInfo()
    {
        #pragma warning disable 4014
        LoadData();
        #pragma warning restore 4014
    }

    private async Task LoadData()
    {
        Uri dataUri = new Uri( "ms-appx:///DataModel/SampleData.json" );

        StorageFile file = await StorageFile.GetFileFromApplicationUriAsync( dataUri );
        string jsonText = await FileIO.ReadTextAsync( file );
        JsonObject jsonObject = JsonObject.Parse( jsonText );

        URL = jsonObject.GetNamedString( "URL" );
        ChangeOrgID = Convert.ToInt32( jsonObject.GetNamedNumber( "ChangeOrgID" ) );
        Author = jsonObject.GetNamedString( "Author" );
        Content = jsonObject.GetNamedString( "Content" );

        JsonArray cities = jsonObject.GetNamedArray( "Communities" );

        foreach( JsonValue cityValue in cities )
        {
            JsonObject curCity = cityValue.GetObject();

            foreach( JsonValue sigValue in curCity.GetNamedArray( "Signatures" ) )
            {
                JsonObject sigObject = sigValue.GetObject();

                SignatureInfo curSig = new SignatureInfo( sigObject.GetNamedString( "Name" ),
                    sigObject.GetNamedString( "Reason" ) );

                CommunityInfo curComm = new CommunityInfo( sigObject.GetNamedString( "City" ),
                    sigObject.GetNamedString( "State" ), sigObject.GetNamedString( "Country" ) );

                CommunityInfo community = Communities.Where( c => c.CommunityID.Equals( curComm.CommunityID ) ).FirstOrDefault();
                if( community == null )
                {
                    community = curComm;
                    Communities.Add( community );
                }

                community.Signatures.Add( curSig );
            }
        }
    }

有趣的是,社区会在设计器窗口中填充,所以看起来检索Json文件是有效的。但是,各个属性(例如,URL)不会被设置,相应的设计器TextBlocks也是空的。

但如果我添加行

Author = "Some Name";

在构造函数中调用LoadData()之后立即更新设计器以显示" Some Name"。

他们是否在设计时调用异步方法有限制?是否有其他方法可以在设计时访问嵌入式JSON文件?

0 个答案:

没有答案