C# 更改属性中的元素时调用该属性的set方法
我有一个包含4个参数的“裁剪”类: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
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。这是正确的,但我必须阅读两次,可能添加示例代码?这是正确的,但我必须阅读两次,可能添加示例代码?