在更改某个属性中的元素时调用该属性的set方法
本文关键字:属性 调用 方法 set 元素 | 更新日期: 2023-09-27 17:57:28
我有一个类"裁剪",它包含4个参数:
public class Cropping
{
public float Top { get; set; }
public float Bottom { get; set; }
public float Left { get; set; }
public float Right { get; set; }
}
在我的UI类中,我有一个裁剪类的实例,它在set块中有一个方法调用,用于更新UI。
private Cropping croppingFactors;
/// <summary>Stores details on how to crop the image</summary>
public Cropping CroppingFactors
{
get { return croppingFactors; }
set
{
croppingFactors = value;
UpdateUIControls();
}
}
这里的目的显然是更新UI控件,每次对裁剪因素之一进行更改时,如果我更改cropping类中的元素,即对的调用
CroppingFactors.Top = 5;
CroppingFactors属性的set方法没有运行。
当我在这样的类中更改元素时,如何更新UI?
编辑
我意识到,设定的财产不会运行,因为我没有为种植类设定新的价值我的问题是:当我更改Cropping类中的任何元素时,我如何调用"UpdateUIControls()"方法?
编辑2
感谢Aran Mulholland给出的答案-以下是我的完整性实现:
我修改了Cropping类以实现INotifyPropertyChanged类
public class Cropping : INotifyPropertyChanged
{
private float top;
public float Top
{
get { return top; }
set
{
top = value;
NotifyPropertyChanged();
}
}
//Same for bottom, left and right
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged()
{
if(PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
然后在UI类中,我订阅了事件:
public ImgHost()
{
InitializeComponent();
CroppingFactors.PropertyChanged += CroppingFactors_PropertyChanged;
}
private void CroppingFactors_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
UpdateUIControls();
}
这就是我的实现,只是为了完整性。谢谢你的回答!
在Cropping
类上实现INotifyPropertyChanged接口。从使用Cropping
类作为属性的UI类订阅属性更改事件,以便每次在Cropping
类的任何成员上设置属性时,都可以调用所需的函数。
您可以随时调用UpdateUIControls()
,但这取决于需要触发更改的内容。另一种选择是添加一个事件:
public event EventHandler PropertyUpdated;
然后,无论什么需要更新控件列表,都可以在事件处理程序中调用控件上的方法。