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));
    }