gpt4 book ai didi

c# - WPF 数据绑定(bind)到变化的对象

转载 作者:太空狗 更新时间:2023-10-29 21:25:55 25 4
gpt4 key购买 nike

我有一个显示当前登录用户名的用户控件。我已将控件中的 TextBlock 绑定(bind)到应用程序中用户对象的 UserId 属性。

我遇到的问题是,每次新用户登录时,我的绑定(bind)作为源的用户对象都会发生变化。

我可以想到一个解决方案,当用户对象发生变化时我会触发一个事件,这会被控件捕获,然后重新初始化绑定(bind),但这似乎不太理想。

这个问题有解决办法吗,感觉应该很普遍吧?

干杯,

詹姆斯

最佳答案

大多数 UI 绑定(bind)已经通过属性通知处理此问题,特别是(对于 WPF)INotifyPropertyChanged。 - 即,如果您要在单个 实例上更新 UserId:

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

这应该会自动更新绑定(bind)。相反,如果您要更改实际的用户实例,请考虑使用相同的技巧,但要针对用户所在的任何主机:

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

如果您绑定(bind)到某物的“User.UserId”,那么它应该可以工作。

关于c# - WPF 数据绑定(bind)到变化的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/839147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com