-1

전역 속성을 변경하여 전송되는 개체로 새 변수를 초기화하는 데 문제가 있습니다. 두 클래스가 있습니다 BeltConfigurationBeltProperty (두 클래스 모두 INotifyPropertyChanged 있습니다). 나는 여기에 보이는 것과 같이 BeltConfiguration 클래스에 globalpropertychanged 메서드를 가지고있다. 내가 그것을 호출 할 때 BeltProperty 클래스에서 전역 속성 변경된 개체 캐스팅 결과 null (C#)

 private void BeltProperty_GlobalPropertyChanged(object sender, PropertyChangedEventArgs e) 
     { 
      BeltProperty validBelt = sender as BeltProperty; 
      if (validBelt != null) 
      { 
       this.Validation = validBelt.Validation; 
      } 
      switch (e.PropertyName) 
      { 
       case "Value": 
        this.Validation.ValidState = ConfigurationValid.Unknown; 
        OnPropertyChanged("Validate"); 
        break; 
       case "ConfigurationInvalid": 
        this.Validation.ValidState = ConfigurationValid.False; 
        OnPropertyChanged("Validate"); 
        break; 
      } 
     } 

, 내가 상관없이 내가 뭘, validBelt 항상 null되는 결과 없습니다, 그러나 OnGlobalPropertyChanged("ConfigurationInvalid"); 와이를 호출합니다. 코드를 살펴보고 객체 발신자를 살펴본 결과, 선언 방법, GenericParametersAttributesGenericParametersPositionSystem.InvalidOperationException을 예외로 던졌습니다. validBelt이 발신자를 BeltProperty으로 허용하지 않는 이유와 관련이 있는지 여부는 알 수 없습니다. 도움이나 조언을 주셔서 감사합니다.

여기는 Belt Property 클래스에서 BeltProperty_GlobalPropertyChanged를 호출 한 곳입니다. validBelt이 과제 후 null 경우

BeltProperty validBelt = sender as BeltProperty 

그것을 보낸 사람이 BeltProperty의 인스턴스로 캐스팅 할 수 없음을 의미합니다 : 당신이 여기 안전한 캐스트를 사용하고 있기 때문에

private ConfigurationValidation _Validation = new ConfigurationValidation(ConfigurationValid.Unknown, "", "", null); 
    /// <summary> 
    /// Stores information as to wether this belt property is valid or invalid, and the details. 
    /// </summary> 
    internal ConfigurationValidation Validation 
    { 
     get { return _Validation; } 
     set { 

      _Validation = value; 
      if(_Validation.ValidState == ConfigurationValid.False) 
      { 
       OnGlobalPropertyChanged("ConfigurationInvalid"); 
      } 
     } 
    } 

    /// <summary> 
    /// A global on property change that runs for any instantiated object of this type. 
    /// </summary> 
    /// <param name="name"></param> 
    static void OnGlobalPropertyChanged(string name) 
    { 
     GlobalPropertyChanged(
      typeof(BeltProperty), 
      new PropertyChangedEventArgs(name)); 
    } 

답변

0

.

호출 코드를 보면 이벤트 처리기에 BeltProperty의 인스턴스를 전달하지 않은 것처럼 보입니다.

가정 GlobalPropertyChangedPropertyChangedEventHandler 대표는이에 OnGlobalPropertyChanged 코드를 변경한다 :

/// <summary> 
/// A global on property change that runs for any instantiated object of this type. 
/// </summary> 
/// <param name="name"></param> 
static void OnGlobalPropertyChanged(string name) 
{ 
    GlobalPropertyChanged(
     this, 
     new PropertyChangedEventArgs(name) 
    ); 
} 
+0

헤이는 일! 도와 주셔서 감사합니다. GlobalPropertyChanged를 변경하는 것은 내가해야 할 일이다. – andrewvb