我正在尝试使用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文件?