gpt4 book ai didi

c# - 以编程方式更改属性 setter 逻辑

转载 作者:行者123 更新时间:2023-11-30 16:11:03 25 4
gpt4 key购买 nike

我需要添加属性 setter 的逻辑。

例如,我有一个名为“CurrentTab”的属性:

private WorkspaceViewModel _currentTab;
public WorkspaceViewModel CurrentTab
{
get
{
return _currentTab;
}
set
{
_currentTab = value;
OnPropertyChanged("CurrentTab");
}
}

这一切都很好并且有效,但我希望能够像这样定义它:

public WorkspaceViewModel CurrentTab { get; set; }

让系统在setter运行后自动对属性名执行OnPropertyChanged()函数,无需我添加任何具体代码。如何识别哪些属性需要遵循这个逻辑是没有问题的,我只需要找到一种方法如何实际去做。

我想让它变得更简单,因为我将拥有大量此类属性,并且我想保持它的整洁。

有办法吗?非常感谢任何帮助!

最佳答案

看看:Fody . INotifyPropertyChange 有一个加载项:github

它在构建解决方案时操纵 IL 代码。

您只需要将属性添加到 View 模型:

[ImplementPropertyChanged]
public class Person
{
public string GivenNames { get; set; }
public string FamilyName { get; set; }

public string FullName
{
get
{
return string.Format("{0} {1}", GivenNames, FamilyName);
}
}
}

当代码被编译时:

public class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

string givenNames;
public string GivenNames
{
get { return givenNames; }
set
{
if (value != givenNames)
{
givenNames = value;
OnPropertyChanged("GivenNames");
OnPropertyChanged("FullName");
}
}
}

string familyName;
public string FamilyName
{
get { return familyName; }
set
{
if (value != familyName)
{
familyName = value;
OnPropertyChanged("FamilyName");
OnPropertyChanged("FullName");
}
}
}

public string FullName
{
get
{
return string.Format("{0} {1}", GivenNames, FamilyName);
}
}

public virtual void OnPropertyChanged(string propertyName)
{
var propertyChanged = PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}

关于c# - 以编程方式更改属性 setter 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24863776/

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