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

时间:2015-06-21 12:58:27

标签: 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类中,我有一个cropping类的实例,它在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?

编辑

我意识到set属性不会运行,因为我没有为cropping类设置新值。 我的问题是:当我更改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();
}

这是我的实施,只是为了完整性。谢谢你的所有答案!

2 个答案:

答案 0 :(得分:3)

SELECT DISTINCT Interests.Interest_name,Impressions.Count FROM Interests Inner Join Impressions ON Interests.Interest_Name = Impressions.Interest_Name WHERE Vertical_name = 'Retail'; 课程上实施INotifyPropertyChanged界面。从使用Cropping类作为属性的UI类订阅属性更改事件,以便每次在Cropping类的任何成员上设置属性时,您可以调用所需的函数

答案 1 :(得分:0)

每当有任何变化时,您都可以随时调用Cropping,但这取决于需要触发更改的内容。另一种选择是添加一个事件:

UpdateUIControls()

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