2009-05-28 11 views
1

Je construis une application de roulette simple. Le joueur (UI) met en place une liste de paris et les soumet à l'objet de la table à évaluer et à payer. J'ai le code pour travailler et le processus de jeu se passe bien. Le problème est qu'après un tour, je ne peux pas obtenir le solde du joueur (bloc de texte) ou la liste de diffusion (listview) à mettre à jour. Existe-t-il une commande globale d'actualisation de la fenêtre qui me manque ou dois-je définir manuellement chacune d'elles pour la mettre à jour d'une manière ou d'une autre?Comment puis-je obtenir une fenêtre wpf à actualiser?

Répondre

2

WPF peut prendre soin de mettre à jour ces valeurs pour vous automatiquement, mais vous devez le faire savoir quand les choses ont changé. En général, cela se fait en utilisant DependencyProperties sur vos objets de modèle, mais cela peut également être fait en implémentant INotifyPropertyChanged. Dans les deux cas, lorsque vous mettez à jour la valeur d'une propriété, l'événement PropertyChanged est appelé; WPF s'abonne automatiquement à cet événement lorsqu'il se lie à une valeur et mettra à jour l'interface utilisateur lorsqu'une modification se produit. Sans cette notification, WPF ne vérifie pas si les valeurs de votre objet ont changé et vous ne verrez pas la modification reflétée sur l'écran.

0

Qu'en est-il de l'implémentation de INotifyPropertyChanged et de lier la balance et la liste de diffusion aux contrôles que vous utilisez?

Quelque chose comme:

public class Player : INotifyPropertyChanged 
    { 
     private int _balance; 

     #region Properties 

     public int Balance 
     { 
      get { return this._balance; } 
      set 
      { 
       if (this._balance != value) 
       { 
        this._balance = value; 
        NotifyPropertyChanged("Balance"); 
       } 
      } 
     } 

     public BindingList<Bet> BetList { get; set; } 

     #endregion // Properties 

     private void NotifyPropertyChanged(string propertyName) 
     { 
      if (this.PropertyChanged != null) 
       this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 

     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     #endregion 
    } 

    public class Bet 
    { 
     // some code 
    } 

Pour la liste de liaison vous auriez pas besoin de mettre en œuvre quoi que ce soit, car il met en œuvre une interface qui informe des modifications à tout ce qui est lié à (IRaiseItemChangedEvents). Mais encore une fois, vous pourriez utiliser une approche différente.

Questions connexes