-1

我在初始化新變量時遇到了一些麻煩,因爲由全局屬性發送的對象發生了更改。我有兩個類BeltConfigurationBeltProperty(兩個類都有INotifyPropertyChanged)。如在此處所示,我在BeltConfiguration課程中有globalpropertychanged方法。全局屬性更改對象投射結果爲空(在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; 
      } 
     } 

BeltProperty類,我OnGlobalPropertyChanged("ConfigurationInvalid"); 但是調用這個,當我打電話吧,不管我做什麼,validBelt結果總是在被null。我通過逐步查看代碼來查看對象發件人,並說它的聲明方法GenericParametersAttributesGenericParametersPosition引發了System.InvalidOperationException的例外。我不知道這是否與validBelt不接受發件人爲BeltProperty有什麼關係。感謝您提供的任何幫助或建議。

這是我在Belt Property類中調用BeltProperty_GlobalPropertyChanged的地方。

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 validBelt = sender as BeltProperty 

validBeltnull這項任務後,意味着發送者不能被鑄造爲BeltProperty一個實例。

看着你的調用代碼,它看起來像你沒有將BeltProperty的實例傳遞到你的事件處理程序中。

假設GlobalPropertyChanged是您的PropertyChangedEventHandler委託更改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