2009-05-08 7 views
5

J'ai un contrôle utilisateur qui affiche le nom de l'utilisateur actuellement connecté. J'ai lié un TextBlock dans le contrôle à la propriété UserId d'un utilisateur obejct dans mon application.Liaison de données WPF à un objet changeant

La question que j'ai est que l'objet utilisateur ma liaison a comme source change à chaque fois qu'un nouvel utilisateur se connecte à.

Je peux penser à une solution où je tire un événement lorsque l'utilisateur obejct changements et ce est attrapé mon par contrôle qui réinitialise alors la liaison mais cela semble moins qu'idéale.

Y at-il une solution à ce problème, je pense qu'il doit être très commun?

Cheers,

James

+0

Est-ce l'objet Utilisateur qui change (dans ce cas, où est-il défini?) Ou est-ce l'UserId qui change (sur la même instance Utilisateur)? –

+0

Si DataSource est en cours de modification, la définition de la source de données sur le nouvel objet doit automatiquement mettre à jour les contrôles liés. Si une propriété liée change, vous avez besoin de INotifyPropertyChanged – Gishu

Répondre

7

La plupart des liaisons de l'interface utilisateur gèrent déjà ce via des notifications de propriété, en particulier (pour WPF) INotifyPropertyChanged. - à savoir si vous mettez à jour l'ID utilisateur sur une seule exemple:

class User : INotifyPropertyChanged { 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string propertyName) { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if(handler!=null) handler(this, new PropertyChangdEventArgs(
              propertyName)); 
    } 
    private string userId; 
    public string UserId { 
     get {return userId;} 
     set { 
      if(userId != value) { 
       userId = value; 
       OnPropertyChanged("UserId"); 
      } 
     } 
    } 
} 

Cela devrait alors mettre à jour la liaison automatiquement. Si vous êtes, au contraire, changer l'instance réelle de l'utilisateur, puis envisager le même tour, mais contre tout ce qui accueille l'utilisateur:

public User User { 
    get {return user;} 
    set { 
     if(user != value) { 
      user = value; 
      OnPropertyChanged("User"); 
     } 
    } 
} 

Et si vous liez, il doit à la « User.UserId » de quelque chose fonctionne.

Questions connexes