我有一个包含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();
}
这是我的实施,只是为了完整性。谢谢你的所有答案!
答案 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()
然后无论需要更新控件列表,都可以在事件处理程序中调用控件上的方法。