5
我有一個用戶控件,顯示當前登錄的用戶名。我將控件中的TextBlock綁定到我的應用程序中的User objjct的UserId屬性。WPF數據綁定到更改對象
我的問題是,用戶對象我的綁定有作爲源每次變化的新用戶登錄英寸
,我觸發一個事件,我能想到的一個解決方案,當用戶obejct變化,這被我控制,然後重新初始化綁定,但這似乎並不理想。
有沒有解決這個問題的方法,我覺得它一定很常見?
乾杯,
詹姆斯
我有一個用戶控件,顯示當前登錄的用戶名。我將控件中的TextBlock綁定到我的應用程序中的User objjct的UserId屬性。WPF數據綁定到更改對象
我的問題是,用戶對象我的綁定有作爲源每次變化的新用戶登錄英寸
,我觸發一個事件,我能想到的一個解決方案,當用戶obejct變化,這被我控制,然後重新初始化綁定,但這似乎並不理想。
有沒有解決這個問題的方法,我覺得它一定很常見?
乾杯,
詹姆斯
大多數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」,那麼它應該工作。
用戶對象是否發生了變化(如果是這樣,它在哪裏設置?)還是用戶ID改變(在同一個用戶實例上)? – 2009-05-08 10:16:31
如果DataSource正在更改,將DataSource設置爲新對象應自動更新綁定控件。如果綁定屬性正在改變..你需要INotifyPropertyChanged – Gishu 2009-05-08 12:30:30