-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