C# 创建一个自定义事件,在值发生更改时捕获该事件
我有个小问题。每次更改属性时,我都要捕获 此属性包装在另一个用户控件中:C# 创建一个自定义事件,在值发生更改时捕获该事件,c#,events,C#,Events,我有个小问题。每次更改属性时,我都要捕获 此属性包装在另一个用户控件中: var color = (CustomWPFColorPicker.ColorPickerControlView) elementHost1.Child; color.CurrentColor <--This property. var color=(CustomWPFColorPicker.ColorPickerControlView)elementHost1.Child; color.CurrentColor在
var color = (CustomWPFColorPicker.ColorPickerControlView) elementHost1.Child;
color.CurrentColor <--This property.
var color=(CustomWPFColorPicker.ColorPickerControlView)elementHost1.Child;
color.CurrentColor在自定义控件上实现,并在给定属性更改时引发PropertyChanged
事件
然后,消费者可以注册PropertyChanged
事件,并检查引发该事件的属性,看看它是否是他们关心的属性
public class MyControl : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
private Color _color = null;
public Color CurrentColor
{
get
{
return _color;
}
set
{
_color = value;
NotifyPropertyChanged("CurrentColor");
}
}
}
然后消费者可以注册事件并根据需要检查属性
MyControl control = new MyControl();
control.PropertyChanged += OnPropertyChanged;
void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "CurrentColor")
{
//do stuff...
}
}
尝试检查ColorPickerControl视图是否实现了INotifyPropertyChanged
。如果它确实将处理程序附加到PropertyChanged
事件中ColorPickerControlView
,然后检查已更改的属性是否为CurrentColor:
编辑:如果可以修改自定义控件,请尝试实现INotifyPropertyChanged
。希望这个例子有助于:
Color currentColor;
public Color CurrentColor
{
get { return currentColor; }
set { currentColor = value; OnPropertyChanged("CurrentColor"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
简单的方法是从属性设置器引发事件。但我感觉你在寻找一个更复杂的解决方案,“消费者可以注册物业变更”这是让我卡住的部分。我如何注册到课外活动?当在子控件中激发事件时,我想在父窗体上反映更改。@Sergio:事件必须公开,并且父控件必须订阅子控件的事件。我不得不修改一些旧代码,但我成功地使其工作。非常感谢你的帮助!:)
Color currentColor;
public Color CurrentColor
{
get { return currentColor; }
set { currentColor = value; OnPropertyChanged("CurrentColor"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}