2012-05-03 9 views
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)); 
    } 
} 
+0

プロパティ設定ツールを使用すると、 'NotifyPropertyChanged'(正しく)を使用して、更新された' LogoStation'にバインドされたUIを通知します。これは、最初に何も表示せず、その後にロードが完了したときにイメージが表示されることを意味します。あなたのビューコードを見ることなく、あなたがここにあるものは正しいように見えます。 – ChrisF

+0

LoadStation_Completedが実行されるのをInfoStation_LoadCompletedコールバックに待つプログラムのセクションを配置します。 –

+0

@ChrisF:thx、しかし私はNotifyPropertyChangedが動作しないと思います – Viiink

答えて

0

。これは、最初に何も表示せず、その後にロードが完了したときにイメージが表示されることを意味します。離れてあなたのInfosクラスINotifyPropertyChangedから継承していないという事実から - あなたがここに持っているもの、あなたのビューのコードを見ずに

は正しく見えます。つまり、イベントは送信されません。

クラス定義を更新してください。

関連する問題