C# 更改属性中的元素时调用该属性的set方法

C# 更改属性中的元素时调用该属性的set方法,c#,C#,我有一个包含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 cropp

我有一个包含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();
  }
}
未运行CroppingFactors属性的set方法

在这样的类中更改元素时,如何更新UI

编辑

我意识到set属性不会运行,因为我没有为裁剪类设置新值我的问题是:当我更改裁剪类中的任何元素时,如何调用'UpdateUIControls()'方法

编辑2

多亏了Aran Mulholland给出的答案——以下是我完整的实施:

我修改了裁剪类以实现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();
}

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

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

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

只要有任何更改,都可以调用
UpdateUIControls(),但这取决于需要什么来触发变化。另一种选择是添加事件:

public event EventHandler PropertyUpdated;

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

只要有任何更改,都可以调用
UpdateUIControls()
,但这取决于触发更改的需要。另一种选择是添加事件:

public event EventHandler PropertyUpdated;

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

您没有使用的方法如何?@roryap他正在修改
cropingfactors
返回的
对象,但没有设置属性。“cropingfactors属性的set方法没有运行。”。当然,它没有被运行——CroppingFactors属性没有被分配不同的值,那么为什么要执行setter呢?请注意,您为裁剪对象的一个属性指定了不同的值,但没有为裁剪因子属性指定不同的值…更新问题以澄清我的目标-我知道为什么它目前不起作用(不设置属性)-我只是不知道如何使它起作用。感谢您可以在属性更改时(在属性的setter中)在裁剪类中引发事件。然后,您可以订阅包含裁剪字段或属性的类中的事件。或者检查INotifyPropertyChanged。您没有的功能如何?@roryap他正在修改由
cropingfactors
返回的
cropingfactors
对象,但没有设置属性。“cropingfactors属性的set方法没有运行。”。当然,它没有被运行——CroppingFactors属性没有被分配不同的值,那么为什么要执行setter呢?请注意,您为裁剪对象的一个属性指定了不同的值,但没有为裁剪因子属性指定不同的值…更新问题以澄清我的目标-我知道为什么它目前不起作用(不设置属性)-我只是不知道如何使它起作用。感谢您可以在属性更改时(在属性的setter中)在裁剪类中引发事件。然后,您可以订阅包含裁剪字段或属性的类中的事件。或者检查INotifyPropertyChanged。这是正确的,但我必须阅读两次,可能添加示例代码?这是正确的,但我必须阅读两次,可能添加示例代码?