在更改某个属性中的元素时调用该属性的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();
}

这就是我的实现,只是为了完整性。谢谢你的回答!

在更改某个属性中的元素时调用该属性的set方法

Cropping类上实现INotifyPropertyChanged接口。从使用Cropping类作为属性的UI类订阅属性更改事件,以便每次在Cropping类的任何成员上设置属性时,都可以调用所需的函数。

您可以随时调用UpdateUIControls(),但这取决于需要触发更改的内容。另一种选择是添加一个事件:

public event EventHandler PropertyUpdated;

然后,无论什么需要更新控件列表,都可以在事件处理程序中调用控件上的方法。