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

查理希尔

我有一个包含四个参数的“裁剪”类:

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?

编辑

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

这就是我的实现,只是为了完整起见。感谢所有的答案!

阿兰·穆赫兰(Aran Mulholland)

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在指令中更改属性

来自分类Dev

每次调用对象后更改属性

来自分类Dev

每次调用对象后更改属性

来自分类Dev

调用属性更改属性已更新时回叫

来自分类Dev

在春季环境中如何更改属性?

来自分类Dev

克隆 DOM 中的元素并在 javascript 中重用它时更改属性

来自分类Dev

如何根据同级元素的数量更改属性的必需/可选?

来自分类Dev

元素的更改属性-为什么不触发onchange事件?

来自分类Dev

屏幕宽度更改属性时CSS的元素排列顺序

来自分类Dev

更改属性值,但仅在子元素满足条件时

来自分类Dev

用vue.set()更改属性不起作用

来自分类Dev

根据条件更改属性

来自分类Dev

WebBrowser控件更改属性

来自分类Dev

按钮数组:更改属性

来自分类Dev

python对象更改属性

来自分类Dev

通过操作更改属性

来自分类Dev

更改属性会出错

来自分类Dev

python对象更改属性

来自分类Dev

RECESS更改属性的顺序

来自分类Dev

根据条件更改属性

来自分类Dev

Geb更改属性值

来自分类Dev

通过操作更改属性

来自分类Dev

从setter更改属性并通知

来自分类Dev

使用循环更改属性

来自分类Dev

调用Timer方法/从C ++ Builder中的其他线程修改属性

来自分类Dev

更改属性对象不会影响属性

来自分类Dev

Python冻结的数据类,允许通过方法更改属性

来自分类Dev

jQuery选择行中的单元格并更改属性?

来自分类Dev

在DetailView小部件中更改属性的值