-1

変更されたグローバルプロパティによって送信されるオブジェクトとして新しい変数を初期化するときに問題が発生します。私はBeltConfigurationBeltPropertyの2つのクラスを持っています(どちらのクラスも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; 
      } 
     } 

、私はしかしOnGlobalPropertyChanged("ConfigurationInvalid"); でこれを呼んで、私はそれを呼び出す際に、関係なく、私は何をすべきか、validBeltは常にnullことになりません。コードをステップ実行してオブジェクトの送信者を調べましたが、宣言方法GenericParametersAttributesGenericParametersPositionが例外System.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のインスタンスをイベントハンドラに渡していないようです。

と仮定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

関連する問題