0
私のビューがLogoStationの値を必要とするとき、プログラムはまだLoadStation_Completedを実行していないのでnullを返します。WP7開発:プログラムをEventHandlerの終了まで待機させる方法は?
私のプログラムは、LoadStation_Completedが実行されるのを待ってから続行します。あなたはそれが更新されたことをLogoStation
にバインドされたUIを伝えるために(正しく)NotifyPropertyChanged
を使用しているプロパティのセッターを使用することにより
Thxを
public class Infos
{
#region propriétés
private DataServiceCollection<SyndicObject> _infosStation;
public DataServiceCollection<SyndicObject> InfosStation
{
get
{
return _infosStation;
}
set
{
_infosStation = value;
}
}
#endregion
string nameStation;
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this,
new PropertyChangedEventArgs(propertyName));
}
}
private ImageSource _logoStation;
public ImageSource LogoStation
{
get
{
return _logoStation;
}
set
{
_logoStation = value;
NotifyPropertyChanged("LogoStation");
}
}
public Infos(string station)
{
nameStation = station;
getInfos();
}
public void getInfos()
{
SyndicationContext service = new SyndicationContext(new Uri("http://test/817bee9d-faf4-4680-9d05-e41c2c90ae5a/"));
IQueryable<SyndicObject> requete = (from objectSki in service.Objects
where objectSki.NOMSTATION == nameStation
select objectSki);
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
InfosStation = new DataServiceCollection<SyndicObject>();
InfosStation.LoadCompleted += new EventHandler<LoadCompletedEventArgs>(InfoStation_LoadCompleted);
InfosStation.LoadAsync(requete);
}
);
}
void InfoStation_LoadCompleted(object sender, LoadCompletedEventArgs e)
{
LogoStation = new BitmapImage(new Uri(@"http://test/upload/" + InfosStation[0].LOGO, UriKind.Absolute));
}
}
プロパティ設定ツールを使用すると、 'NotifyPropertyChanged'(正しく)を使用して、更新された' LogoStation'にバインドされたUIを通知します。これは、最初に何も表示せず、その後にロードが完了したときにイメージが表示されることを意味します。あなたのビューコードを見ることなく、あなたがここにあるものは正しいように見えます。 – ChrisF
LoadStation_Completedが実行されるのをInfoStation_LoadCompletedコールバックに待つプログラムのセクションを配置します。 –
@ChrisF:thx、しかし私はNotifyPropertyChangedが動作しないと思います – Viiink