gpt4 book ai didi

c# - 如何在 WPF 中使模型类可观察

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

场景

我从外部组件或我不想更改某些内容的代码部分获取模型类。我想将此类绑定(bind)到某些 WPF UI。如果此模型发生更改,我还想刷新 UI。

问题

我真的需要一直编写一个包装类,为每个 setter 创建 PropertyChanged 事件吗?我怎样才能避免手动编写所有这些线索编码?

什么开始是这样的......

public class User : IUser
{
public String Name { get; set; }
public bool CurrentlyLoggedIn { get; set; }

// ...
}

...永远都是这样臃肿

public class UserObservableWrapper : IUser, INotifyPropertyChanged
{
public String Name
{
get
{
return this.innerUser.Name;
}
set
{
if (value == this.innerUser.Name)
{
return;
}

this.innerUser.Name = value;
this.OnPropertyChanged( "Name" );
}
}

public bool CurrentlyLoggedIn
{
get
{
return innerUser.CurrentlyLoggedIn;
}
set
{
if (value.Equals( innerUser.CurrentlyLoggedIn ))
{
return;
}
innerUser.CurrentlyLoggedIn = value;
this.OnPropertyChanged( "CurrentlyLoggedIn" );
}
}

private readonly IUser innerUser;

public UserObservableWrapper( IUser nonObservableUser )
{
this.innerUser = nonObservableUser;
}

public event PropertyChangedEventHandler PropertyChanged;

[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged( string propertyName )
{
PropertyChangedEventHandler handler = this.PropertyChanged;

if (handler != null)
{
handler( this, new PropertyChangedEventArgs( propertyName ) );
}
}
}

一定有更智能的方法来做到这一点!?

最佳答案

如果这种情况在您的代码中发生的次数不多,我建议您使用样板代码。

否则,你可以使用这个cool piece of code从 Ayende 生成一个代理类,它将自动为您实现 INotifyPropertyChanged(包括事件引发)。用法如下所示:

IUser userProxy = DataBindingFactory.Create<User>();

关于c# - 如何在 WPF 中使模型类可观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27962209/

25 4 0
文章推荐: Python多处理器编程
文章推荐: c# - 从 PropertyInfo 获取访问器作为 Func 和 Action 委托(delegate)