0
对于应用程序,我必须使用自定义按钮,该按钮在其属性值之一发生更改时发生反应。我addded一个名为Data
新按钮域:将属性已更改的事件添加到自定义控件
public class ButtonData
{
public string Name;
public string Color;
//And more stuff...
}
然后,我已经为新的按钮如下因素代码,我希望它能够自我更新(更改背景颜色和一些其他的东西),只要其Data
财产从应用程序的某处获取更新。我发现有关实施INotifyPropertyChanged
界面的一些想法,我把它在我的自定义按钮是这样的:
public partial class ButtonPin : Button, INotifyPropertyChanged
{
private ButtonData _data;
public ButtonData Data
{
get { return _data; }
set
{
if (value == _data) return;
_data = value;
OnPropertyChanged("Data");
}
}
private bool _buttonDataAdded;
public ButtonPin()
{
InitializeComponent();
}
public ButtonPin(ButtonData data)
{
Data = data;
_buttonDataAdded = true;
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
现在我不知道怎么用这个!例如,如果Data
对象中的颜色以某种方式更改为 ,并将其分配给当前按钮的数据字段,我希望此按钮更改其背景颜色。像
var data = new ButtonData();
data.Name = "Hi!";
data.Color = Color.Red;
buttonPin1.Data = data; //Here I need the changes to occur
嗯我想更新发生在'数据'对象已被分配到'按钮',这将是相同的?! – 2012-07-09 08:16:34
是的,更新()方法在专用字段设置后调用,以显式更新您的按钮,因为有一个新的ButtonData对象。属性更改事件是在设置ButtonData对象后处理更改。 – Maarten 2012-07-09 08:36:59