2009-05-08 130 views
5

我有一個用戶控件,顯示當前登錄的用戶名。我將控件中的TextBlock綁定到我的應用程序中的User objjct的UserId屬性。WPF數據綁定到更改對象

我的問題是,用戶對象我的綁定有作爲源每次變化的新用戶登錄英寸

,我觸發一個事件,我能想到的一個解決方案,當用戶obejct變化,這被我控制,然後重新初始化綁定,但這似乎並不理想。

有沒有解決這個問題的方法,我覺得它一定很常見?

乾杯,

詹姆斯

+0

用戶對象是否發生了變化(如果是這樣,它在哪裏設置?)還是用戶ID改變(在同一個用戶實例上)? – 2009-05-08 10:16:31

+0

如果DataSource正在更改,將DataSource設置爲新對象應自動更新綁定控件。如果綁定屬性正在改變..你需要INotifyPropertyChanged – Gishu 2009-05-08 12:30:30

回答

7

大多數UI綁定已經通過物業通知處理這個問題,特別是(對WPF)INotifyPropertyChanged。 - 也就是說,如果你正在更新一個實例的用戶名:

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"); 
      } 
     } 
    } 
} 

這應該然後自動更新綁定。如果你是,相反,改變實際用戶實例,然後再考慮同樣的伎倆,但反對任何託管用戶:

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

如果你有約束力的東西的「User.UserId」,那麼它應該工作。