1

現在、新しい Silverlight プロジェクトを開始していますが、ViewModel (インスタンス化中) に RaisePropertyChanged イベントが含まれている場合、Unity が例外をスローするという問題があります。

私はこのように見えます:

public class AddNewClientViewModel : ViewModelBase {

    private Visibility _extraClientFieldsVisible;
    public Visibility ExtraClientFieldsVisible {
        get {
            return _extraClientFieldsVisible;
        }
        set {
            _extraClientFieldsVisible = value;
            base.RaisePropertyChanged("ExtraClientFieldsVisible");
        }
    }


public AddNewClientViewModel(IMyInterface blah) {


       ExtraClientFieldsVisible = Visibility.Collapsed;
}

継承する ViewModelBase は次のようになります。

    public abstract class ViewModelBase : INotifyPropertyChanged {

    public event PropertyChangedEventHandler PropertyChanged;

    public  void RaisePropertyChanged(string propertyName) {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }


}

完全なスタック トレースを以下に示しますが、コンストラクター中に RaisePropertyChanged イベントを呼び出すと、Unity が爆発するようです。

エラーの完全なスタック トレースは次のとおりです。

Microsoft.Practices.Unity.ResolutionFailedException was unhandled by user code
Message="Resolution of the dependency failed, type = \"ClientSide.ViewModels.AddNewClientViewModel\", name = \"\". Exception message is: The current build operation (build key Build Key[ClientSide.ViewModels.AddNewClientViewModel, null]) failed: Object reference not set to an instance of an object. (Strategy type BuildPlanStrategy, index 3)"
TypeRequested="AddNewClientViewModel"
 StackTrace:
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name)
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name)
   at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name)
   at Microsoft.Practices.Unity.UnityContainerBase.Resolve(Type t)
   at Microsoft.Practices.Unity.UnityContainerBase.Resolve[T]()
   at ClientSide.Framework.ServiceLocator.get_AddNewClientViewModel()
InnerException: Microsoft.Practices.ObjectBuilder2.BuildFailedException
   Message="The current build operation (build key Build Key[ClientSide.ViewModels.AddNewClientViewModel, null]) failed: Object reference not set to an instance of an object. (Strategy type BuildPlanStrategy, index 3)"
   BuildKey="Build Key[ClientSide.ViewModels.AddNewClientViewModel, null]"
   ExecutingStrategyIndex=3
   ExecutingStrategyTypeName="BuildPlanStrategy"
   StackTrace:
        at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.Builder.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing)
        at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name)
   InnerException: System.NullReferenceException
        Message="Object reference not set to an instance of an object."
        StackTrace:
             at ClientSide.ViewModels.ViewModelBase.RaisePropertyChanged(String propertyName)
             at ClientSide.ViewModels.AddNewClientViewModel.set_ExtraClientFieldsVisible(Visibility value)
             at ClientSide.ViewModels.AddNewClientViewModel..ctor(IDataCore dataCore)
             at BuildUp_ClientSide.ViewModels.AddNewClientViewModel(IBuilderContext )
             at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
             at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
             at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
        InnerException: 

だから私はNullReferenceExceptionを打っています。私はちょうど方法を解決することはできません...

4

1 に答える 1

3

で null をチェックしないのはなぜRaisePropertyChanged()ですか?

結局のところ、それは有害な副作用を引き起こすことはありません...

于 2009-11-08T06:48:33.800 に答える