2015-05-03 4 views
0

Сначала я также подумал, что это небольшая проблема, но я действительно не знаю, как ее решить!PropertyChanged is null

Я написал свой класс «Point» для реализации PropertyChanged, но он не работает, потому что «PropertyChanged == null» является истинным.

Здесь MySource:

public class RaPoint : DependencyObject, INotifyPropertyChanged 
{ 
    public RaPoint() : this(0,0) 
    { 
    } 

    public RaPoint(double X, double Y) 
    { 
     this.X = X; 
     this.Y = Y; 
    } 

    public RaPoint(Point Position) 
     : this(Position.X, Position.Y) 
    { 
    } 

    public RaPoint(RaPoint Position) 
     : this(Position.X, Position.Y) 
    { 
    } 

    public static RaPoint operator +(RaPoint P1, Vector V1) 
    { 
     P1.X += V1.X; 
     P1.Y += V1.Y; 
     return P1; 
    } 

    public double X 
    { 
     get 
     { 
      return (double)GetValue(XProperty); 
     } 
     set 
     { 
      SetValue(XProperty, value); 
      RaisePropertyChanged("X"); 
     } 
    } 
    public static readonly DependencyProperty XProperty = DependencyProperty.Register("X", typeof(double), typeof(RaPoint), new FrameworkPropertyMetadata() 
    { 
     BindsTwoWayByDefault = true, 
     DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged 
    } 
    ); 


    public double Y 
    { 
     get 
     { 
      return (double)GetValue(YProperty); 
     } 
     set 
     { 
      SetValue(YProperty, value); 
      RaisePropertyChanged("Y"); 
     } 
    } 
    public static readonly DependencyProperty YProperty = DependencyProperty.Register("Y", typeof(double), typeof(RaPoint), new FrameworkPropertyMetadata() 
    { 
     BindsTwoWayByDefault = true, 
     DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged 
    } 
    ); 


    public override string ToString() 
    { 
     return String.Format("X:{0} Y:{1}", X.ToString(), Y.ToString()); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected void RaisePropertyChanged(string name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(name)); 
     } 
    } 

    public void Set(double X, double Y) 
    { 
     this.X = X; 
     this.Y = Y; 
    } 

    public void Set(RaPoint Position) 
    { 
     Set(Position.X, Position.Y); 
    } 

    public void Set(Point Position) 
    { 
     Set(Position.X, Position.Y); 
    } 
} 

спасибо!

+1

У меня такое чувство, что вы что-то смешали. Либо вы реализуете 'INotifyPropertyChanged', либо используете свойства зависимостей. Где и как вы будете использовать этот класс? – ZoolWay

+1

Я предполагаю, что вы привязываетесь к свойствам 'X' и' Y'? Не уверенно на 100%, но я думаю, что презентация не будет подписаться на ваш 'PropertyChanged', так как вы зарегистрированы здесь DependencyProperties. «INotifyPropertyChanged» и «DependencyProperty» являются двумя эксклюзивными сценариями IMO. –

+0

О, я не знал, что мне не разрешено использовать оба в одном значении !! Спасибо! Могу ли я использовать оба класса? – MisterPresident

ответ

-2

Вы установили правильное значение для объекта DataContext? Например: this.DataContext = raPoint;

Смежные вопросы