public class Employee : System.ComponentModel.INotifyPropertyChanged
{
private string _name;
public string Name
{
get{return _name;}
set{if(_name != value){
_name =value;
SendPropertyChanged("Name:"+value);
}}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected virtual void SendPropertyChanged(String propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}public class ClassTest
{
public ClassTest()
{    
   Gloal.Em.PropertyChanged -= Employee_PropertyChanged;
   Gloal.Em.PropertyChanged += Employee_PropertyChanged;
}
private void Employee_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
Console.WriteLine(e.PropertyName);
}
}public class Gloal
{
   public static Employee Em;
}static class Program
{
   [STAThread]
   static void Main(string[] args)
   {
Gloal.Em = new Employee{Name = "a"}; ClassTest t = new ClassTest();
Gloal.Em.Name = "b";

ClassTest t1 = new ClassTest();
Gloal.Em.Name = "c";

ClassTest t2 = new ClassTest();
ClassTest t12 = new ClassTest();
Gloal.Em.Name = "d";
   }

输出结果:
Name:b
Name:c
Name:c
Name:d
Name:d
Name:d
Name:d-= 为啥不起作用呢?

解决方案 »

  1.   

           Gloal.Em.PropertyChanged -= Employee_PropertyChanged;    
           Gloal.Em.PropertyChanged += Employee_PropertyChanged;
    你减完了,又加上了
      

  2.   

    SendPropertyChanged("Name:"+value);
    改为:
    SendPropertyChanged("Name:");
    试试~~
      

  3.   

    减完了,又加上了,就是想确保只关联一次。Gloal.Em.Name = "d"的时候,触发了4次!
      

  4.   


    public ClassTest()
        {       
           Gloal.Em.PropertyChanged -= Employee_PropertyChanged;    
           Gloal.Em.PropertyChanged += Employee_PropertyChanged;
        }
        private void Employee_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            Console.WriteLine(e.PropertyName);
        }=》 public ClassTest()
            {
                
                Gloal.Em.PropertyChanged += Employee_PropertyChanged;
            }
            private void Employee_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
            {
                Console.WriteLine(e.PropertyName);
                Gloal.Em.PropertyChanged -= Employee_PropertyChanged;
            }说实话这样子在一个实例构造函数里面去改变一个静态变量 我觉得出问题很正常~