Prism INavigationAware接口不调用IsNavigationTarget

时间:2016-07-05 12:14:40

标签: wpf prism

我正在使用prism 6,在我的应用程序中我有模块。我想导航到不同模块的不同视图,我正在使用 INavigationAware接口。我每次从当前视图导航时都可以调用OnNavigatedFrom,但是当我进入一个新视图时OnNavigatedTo没有被触发,这让我很头疼。我将我的代码从bootstrap发布到一个模块的viewmodel。

Bootstraper.cs

public class Bootstrapper : UnityBootstrapper
{
    #region Members
    private ILog _logger;
    #endregion

    #region Properties
    #endregion

    #region Methods
    protected override DependencyObject CreateShell()
    {
        _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        RegisterTypes();

        return Container.Resolve<AppShell>();
    }

    protected override void InitializeShell()
    {
        App.Current.MainWindow = (Window)this.Shell;
        App.Current.MainWindow.Show();
    }

    protected void RegisterTypes()
    {
        Container.RegisterType<ILogger, Log4NetLogger>(new InjectionConstructor(_logger));
        Container.RegisterType<IEncryption, SymmetricEncryption>();
        Container.RegisterType<IGetSavviUow, GetSavviUowMock>();
        Container.RegisterType<ICustomAuthentication, MockCustomAuthentication>();
        Container.RegisterType<ICustomPrincipal, CustomPrincipal>();
        Container.RegisterType<IIdNumberValidation, IdNumberValidation>();
        Container.RegisterType<ISalesValidation, SalesValidation>();

        AutoMapperConfig.RegisterMappings();

    }

    protected override void ConfigureModuleCatalog()
    {
        ModuleCatalog.AddModule(new ModuleInfo()
            {
                InitializationMode = InitializationMode.WhenAvailable,
                ModuleType = typeof(LoginModuleDefinition).AssemblyQualifiedName,
                ModuleName = typeof(LoginModuleDefinition).Name
            });

        ModuleCatalog.AddModule(new ModuleInfo()
        {
            InitializationMode = InitializationMode.OnDemand,
            ModuleType = typeof(AgentQueueModuleDefinition).AssemblyQualifiedName,
            ModuleName = typeof(AgentQueueModuleDefinition).Name
        });

        ModuleCatalog.AddModule(new ModuleInfo()
        {
            InitializationMode = InitializationMode.OnDemand,
            ModuleType = typeof(PreQualificationModuleDefinition).AssemblyQualifiedName,
            ModuleName = typeof(PreQualificationModuleDefinition).Name
        });

        ModuleCatalog.AddModule(new ModuleInfo()
        {
            InitializationMode = InitializationMode.OnDemand,
            ModuleType = typeof(SearchModuleDefinition).AssemblyQualifiedName,
            ModuleName = typeof(SearchModuleDefinition).Name
        });

        ModuleCatalog.AddModule(new ModuleInfo()
        {
            InitializationMode = InitializationMode.OnDemand,
            ModuleType = typeof(PlanSelectionModuleDefinition).AssemblyQualifiedName,
            ModuleName = typeof(PlanSelectionModuleDefinition).Name
        });

        ModuleCatalog.AddModule(new ModuleInfo()
        {
            InitializationMode = InitializationMode.OnDemand,
            ModuleType = typeof(BenefitsScriptModuleDefinition).AssemblyQualifiedName,
            ModuleName = typeof(BenefitsScriptModuleDefinition).Name
        });

        ModuleCatalog.AddModule(new ModuleInfo()
        {
            InitializationMode = InitializationMode.OnDemand,
            ModuleType = typeof(PersonalInfoModuleDefinition).AssemblyQualifiedName,
            ModuleName = typeof(PersonalInfoModuleDefinition).Name
        });
    }

    protected override void InitializeModules()
    {
        base.InitializeModules();
    }
    #endregion

    #region Constructors
    #endregion
}

ShellViewModel.cs

public class ShellViewModel : ViewModelBase
{
    #region Members
    private string _username;
    private bool _isLoggedIn;
    private string _viewName;
    private bool _canCreateNewMembership;
    private bool _canUpgrade;
    private bool _canReinstate;
    private bool _canContinue;

    private ILogger _logger;
    private IModuleManager _moduleManager;
    private IRegionManager _regionManager;
    private Guid _agentRefId;
    #endregion

    #region Properties
    public string Username
    {
        get { return _username; }
        set 
        {
            SetProperty(ref _username, value);
        }
    }

    public bool IsLoggedIn
    {
        get { return _isLoggedIn; }
        set { SetProperty(ref _isLoggedIn, value); }
    }

    public string ViewName
    {
        get { return _viewName; }
        set { SetProperty(ref _viewName, value); }
    }
    #endregion

    #region Methods

    private void InitDelegateCommands()
    {
        this.LogoutCommand = new DelegateCommand(Logout);
        this.ContinueCommand = new DelegateCommand<string>(Continue, CanContinue);
        this.CreateNewMembershipCommand = new DelegateCommand(CreateNewMembership, CanCreateNewMembership);
        this.ExitApplicationCommand = new DelegateCommand(ExitApplication);
        this.ReinstateCommand = new DelegateCommand(Reinstate, CanReinstate);
        this.SaveAndExitCommand = new DelegateCommand(SaveAndExit);
        this.SaveProgressCommand = new DelegateCommand(Save);
        this.SetCallBackCommand = new DelegateCommand(SetCallBack);
        this.UpgradeCommand = new DelegateCommand(Upgrade, CanUpgrade);
    }

    private bool CanContinue(string navigatingTo)
    {
        this.NavigatingToView = navigatingTo;

        return _canContinue;
    }

    private void Continue(string currentView)
    {
        this.Aggregator.GetEvent<ContinueEvent>().Publish(
            this.ViewNavigationList
            .First(x => 
                x.CurrentView == currentView).RequestedView);
    }

    private bool CanUpgrade()
    {
        return _canUpgrade;
    }

    private void Upgrade()
    {
        this.Aggregator.GetEvent<UpgradeEvent>().Publish(_agentRefId);
    }

    private void Logout()
    {
        ICustomPrincipal customPrincipal = Thread.CurrentPrincipal as ICustomPrincipal;

        if (customPrincipal != null)
        {
            customPrincipal.CustomIdentity = new AnonymousIdentity();
            this.Username = string.Empty;
            this.IsLoggedIn = false;
            ShowView(ModuleViewConstants.LoginView);
        }
    }

    private void SetCallBack()
    {
        this.Aggregator.GetEvent<SetCallBackEvent>().Publish(_agentRefId);
    }

    private void Save()
    {
        this.Aggregator.GetEvent<SaveEvent>().Publish(_agentRefId);
    }

    private void SaveAndExit()
    {
        this.Aggregator.GetEvent<SaveEvent>().Publish(_agentRefId);
    }

    private bool CanReinstate()
    {
        return _canReinstate;
    }

    private void Reinstate()
    {
        this.Aggregator.GetEvent<ContinueEvent>().Publish(ModuleViewConstants.PlanSelectionView);
    }

    private bool CanCreateNewMembership()
    {
        return _canCreateNewMembership;
    }

    private void CreateNewMembership()
    {
        this.Aggregator.GetEvent<ContinueEvent>().Publish(ModuleViewConstants.PlanSelectionView);
    }

    private void ExitApplication()
    {
        this.Aggregator.GetEvent<ExitApplicationEvent>().Publish(_agentRefId);
    }

    private void OnLoggedOn(LoggedOnArgument args)
    {
        this.Username = args.Username;
        this.IsLoggedIn = args.IsLoggedOn;
        _agentRefId = args.AgentRefId;

        LoadModules();

        _regionManager.Regions[RegionConstants.QueueRegion].Context = _agentRefId;
        ShowView(ModuleViewConstants.PreQualificationView);
    }

    private void LoadModules()
    {

        _moduleManager.LoadModule(typeof(AgentQueueModuleDefinition).Name);
        _moduleManager.LoadModule(typeof(SearchModuleDefinition).Name);
        _moduleManager.LoadModule(typeof(PreQualificationModuleDefinition).Name);
        _moduleManager.LoadModule(typeof(PlanSelectionModuleDefinition).Name);
        _moduleManager.LoadModule(typeof(BenefitsScriptModuleDefinition).Name);
        _moduleManager.LoadModule(typeof(PersonalInfoModuleDefinition).Name);
    }

    private void ShowView(string view)
    {
        this.ViewName = view;
        this.CurrentView = view;

        _regionManager.RequestNavigate(
            RegionConstants.OperationsRegion,
            new Uri(view, UriKind.Relative));
    }

    private void AssingCanCreateNewMembership(bool canCreateMembership)
    {
        _canCreateNewMembership = canCreateMembership;
        CreateNewMembershipCommand.RaiseCanExecuteChanged();
    }

    private void AssignCanContinue(bool canContinue)
    {
        _canContinue = canContinue;
        ContinueCommand.RaiseCanExecuteChanged();
    }

    private void AssignCanUpgrade(bool canUpgrade)
    {
        _canUpgrade = canUpgrade;
        UpgradeCommand.RaiseCanExecuteChanged();
    }

    private void AssignCanReinstate(bool canReinstate)
    {
        _canReinstate = canReinstate;
        ReinstateCommand.RaiseCanExecuteChanged();            
    }

    private void EventSubscriptions()
    {
        this.Aggregator.GetEvent<LoggedOnEvent>().Subscribe(OnLoggedOn);
        this.Aggregator.GetEvent<ShowViewEvent>().Subscribe(ShowView);
        this.Aggregator.GetEvent<CanCreateNewMembership>().Subscribe(AssingCanCreateNewMembership);
        this.Aggregator.GetEvent<CanContinueEvent>().Subscribe(AssignCanContinue);
        this.Aggregator.GetEvent<CanUpgradeEvent>().Subscribe(AssignCanUpgrade);
        this.Aggregator.GetEvent<CanReinstateEvent>().Subscribe(AssignCanReinstate);
    }
    #endregion

    #region Commands
    public DelegateCommand LogoutCommand { get; set; }
    public DelegateCommand ExitApplicationCommand { get; set; }
    public DelegateCommand<string> ContinueCommand { get; set; }
    public DelegateCommand SaveProgressCommand { get; set; }
    public DelegateCommand SetCallBackCommand { get; set; }
    public DelegateCommand SaveAndExitCommand { get; set; }
    public DelegateCommand CreateNewMembershipCommand { get; set; }
    public DelegateCommand ReinstateCommand { get; set; }
    public DelegateCommand UpgradeCommand { get; set; }
    #endregion

    #region Events
    #endregion

    #region Construction
    public ShellViewModel(
        IRegionManager regionManager,
        IUnityContainer container,
        IEventAggregator aggregator, 
        IModuleManager moduleManager,
        ILogger logger)
        : base(aggregator, container)
    {

        _logger = logger;
        _logger.Info("Starting Shell");
        _moduleManager = moduleManager;
        _regionManager = regionManager;
        InitDelegateCommands();
        EventSubscriptions();
    }
    #endregion
}

PreQualificationModule

PreQualificationModuleDefinition.cs

public class PreQualificationModuleDefinition : IModule
{
    #region Members
    private IRegionManager _regionManager;
    private IUnityContainer _container;
    #endregion

    #region Properties
    #endregion

    #region Methods
    public void Initialize()
    {
        _container.RegisterType<object, PreQualificationView>(ModuleViewConstants.PreQualificationView);
        _regionManager.RegisterViewWithRegion(RegionConstants.OperationsRegion, typeof(PreQualificationView));
    }
    #endregion

    #region Constructors
    public PreQualificationModuleDefinition(
        IRegionManager regionManager,
        IUnityContainer container)
    {
        _regionManager = regionManager;
        _container = container;
    }
    #endregion

}

PreQualificationViewModel.cs

public class PreQualificationViewModel : ViewModelBase, INavigationAware
{
    #region Members
    private string _name;
    private int _selectedIdType;
    private string _contactNumber;
    private string _idNumber;
    private DateTime? _dateOfBirth;
    private int? _age;
    private string _gender;
    private string _passportNumber;
    private bool _isCitizen;
    private bool _isSearch;
    private bool _showUserControl;
    private bool _showPassportFields;
    private bool _hasContactNumber;
    private ObservableCollection<string> _genderList;
    private int? _planId;
    private IList<PolicyGrid> _policies;
    private Principal _mainMember;
    private Lead _lead;
    private Membership _membership;

    private IGetSavviUow _uow;
    private IIdNumberValidation _idNumberValidation;
    private ICustomPrincipal _principal;
    private ISalesValidation _salesValidation;
    private IRegionManager _regionManager;
    #endregion

    #region Properties
    public string Name
    {
        get { return _name; }
        set { SetProperty(ref _name, value); }
    }

    public int SelectedIdType
    {
        get { return _selectedIdType; }
        set 
        {
            SetProperty(ref _selectedIdType, value, this);
            if (_selectedIdType == 2)
            {
                this.ShowPassportFields = true;
                this.IsCitizen = false;
            }
            else
            {
                this.ShowPassportFields = false;
                this.IsCitizen = true;
            }
        }
    }

    public ObservableCollection<KeyValuePair<int, string>> IdTypes
    {
        get
        {
            return new ObservableCollection<KeyValuePair<int, string>>()
                {
                    new KeyValuePair<int, string>(1, "RSA ID Number"),
                    new KeyValuePair<int, string>(2, "Passport")
                };
        }
    }

    [Required]
    public string ContactNumber
    {
        get { return _contactNumber; }
        set 
        { 
            SetProperty(ref _contactNumber, value, this);
        }
    }

    [IdValidation("SelectedIdType")]
    [RequiredIf("SelectedIdType", 1)]
    [Display(Name = "ID Number")]
    public string IdNumber
    {
        get { return _idNumber; }
        set 
        { 
            SetProperty(ref _idNumber, value, this);

            if (_idNumberValidation.IsCitizen(_idNumber))
            {
                this.IsCitizen = true;
                SetIdProperties();
            }

        }
    }

    [RequiredIf("SelectedIdType", 2)]
    [Display(Name = "Date of Birth")]
    public Nullable<DateTime> DateOfBirth
    {
        get { return _dateOfBirth; }
        set 
        { 
            SetProperty(ref _dateOfBirth, value, this);

            if (_dateOfBirth != null)
                this.Age = DateTime.Today.Year - _dateOfBirth.Value.Year;
        }
    }

    [AgeMinMax("PlanId")]
    public Nullable<int> Age
    {
        get { return _age; }
        set 
        { 
            SetProperty(ref _age, value, this);
        }
    }

    [RequiredIf("SelectedIdType", 2)]
    public string Gender
    {
        get { return _gender; }
        set 
        { 
            SetProperty(ref _gender, value, this);
        }
    }

    public ObservableCollection<string> GenderList
    {
        get { return _genderList; }

        set 
        { 
            SetProperty(ref _genderList, value);

        }
    }

    [RequiredIf("SelectedIdType", 2)]
    [Display(Name = "Passport Number")]
    public string PassportNumber
    {
        get { return _passportNumber; }
        set 
        { 
            SetProperty(ref _passportNumber, value, this);
        }
    }

    public bool IsCitizen
    {
        get { return _isCitizen; }
        set { SetProperty(ref _isCitizen, value, this); }
    }

    public bool IsSearch
    {
        get { return _isSearch; }
        set { SetProperty(ref _isSearch, value, this); }
    }

    public bool ShowUserControl
    {
        get { return _showUserControl; }
        set { SetProperty(ref _showUserControl, value, this); }
    }

    public bool ShowPassportFields
    {
        get { return _showPassportFields; }
        set { SetProperty(ref _showPassportFields, value, this); }
    }

    public bool HasContactNumber
    {
        get { return _hasContactNumber; }
        set { SetProperty(ref _hasContactNumber, value, this); }
    }

    public Nullable<int> PlanId
    {
        get { return _planId; }
        set { _planId = value; }
    }

    public IList<PolicyGrid> Policies
    {
        get { return _policies; }
        set { SetProperty(ref _policies, value); }
    }
    #endregion

    #region Methods
    private void SetIdProperties()
    {
        this.Age = _idNumberValidation.GetAge(DateTime.Today, this.IdNumber);
        this.DateOfBirth = _idNumberValidation.GetDateOfBirth(this.IdNumber);
        this.Gender = _idNumberValidation.GetGender(this.IdNumber);
    }

    private void GetLeadInfo(int callQueueId)
    {
        ClearProperties();

        var callQueue = _uow.RepoCallQueue.GetLeadByCallQueueIdRefId(callQueueId, _principal.CustomIdentity.RefId);
        this.ShowUserControl = true;
        var leadCallQueue = callQueue.Lead_CallQueue.FirstOrDefault(x => x.CallQueueId == callQueueId);
        _lead = leadCallQueue.Lead;

        this.Name = _lead.FirstName + " " + _lead.Surname;
        this.IdNumber = _lead.IdNumber;
        this.PlanId = _lead.PlanId;

        if (!string.IsNullOrEmpty(_lead.Mobile))
        {
            this.HasContactNumber = true;
            this.ContactNumber = _lead.Mobile;
        }

        if (!string.IsNullOrEmpty(_lead.IdNumber) &&
            _idNumberValidation.IsCitizen(_lead.IdNumber))
        {
            this.SelectedIdType = 1;
        }
        else if (!string.IsNullOrEmpty(_lead.IdNumber))
        {
            this.SelectedIdType = 2;
        }
    }

    private void ClearProperties()
    {
        this.IdNumber = string.Empty;
        this.DateOfBirth = null;
        this.Gender = null;
        this.Age = null;
    }

    private void SearchedMembership(SearchArgs arg)
    {
        ClearProperties();

        this.ShowUserControl = true;
        List<Membership> memberships = new List<Membership>();

        if (!string.IsNullOrEmpty(arg.SearchedId))
        {
            switch (arg.SearchingType)
            {
                case 1:
                    //Membership Number
                    memberships = _uow.RepoMembership.GetMembershipsByMembershipNumber(Convert.ToInt32(arg.SearchedId)).ToList();
                    break;
                case 2:
                    //ID Number
                    memberships = _uow.RepoMembership.GetMembershipsByIdNumber(arg.SearchedId).ToList();
                    break;
                case 3:
                    //Passport
                    memberships = _uow.RepoMembership.GetMembershipsByPassport(arg.SearchedId).ToList();
                    break;
                default:
                    throw new ArgumentException("Uknown Searching type!");
            }

            _mainMember = memberships.FirstOrDefault().Principal;

            if(memberships.Count > 0)
               this.Policies = memberships.Select(x => new PolicyGrid(
                   x.Id,
                   _uow.Plan.GetById(x.PlanId.Value).Description,
                   _uow.MembershipStatus.GetById(x.MembershipStatusId).Description,
                   x.CommenceDate.HasValue?x.CommenceDate.Value.ToString("dd/MM/yyyy") : null,
                   x.ResignationDate.HasValue ? x.ResignationDate.Value.ToString("dd/MM/yyyy") : null)).ToList();

            this.Name = _mainMember.FirstName + " " + _mainMember.Surname;
            this.IdNumber = _mainMember.IdNumber;
            this.PlanId = _uow.RepoMembership.GetLatestMembership(this.IdNumber).PlanId;

            if (!string.IsNullOrEmpty(_mainMember.Mobile))
            {
                this.HasContactNumber = true;
                this.ContactNumber = _mainMember.Mobile;
            }

            if (!string.IsNullOrEmpty(_mainMember.IdNumber) &&
                _idNumberValidation.IsCitizen(_mainMember.IdNumber))
            {
                this.SelectedIdType = 1;
            }
            else if (!string.IsNullOrEmpty(_mainMember.IdNumber))
            {
                this.SelectedIdType = 2;
            }
        }
    }

    private void RaiseCommands(object value)
    {
        if (!string.IsNullOrEmpty(this.IdNumber))
        {
            if (!_salesValidation.IdNumberExists(this.IdNumber) && !this.HasErrors)
            {
                this.Aggregator.GetEvent<CanCreateNewMembership>().Publish(true);
            }
            else if (_salesValidation.IdNumberExists(this.IdNumber) && 
                !_salesValidation.IncompleteApplication(this.IdNumber) &&
                !_salesValidation.CanUpgrade(this.IdNumber) &&
                !_salesValidation.CanReInstate(this.IdNumber))
            {
                //this.Aggregator.GetEvent<CanCreateNewMembership>().Publish(true);
            }
            else
            {
                this.Aggregator.GetEvent<CanCreateNewMembership>().Publish(false);
            }

            if (_salesValidation.IdNumberExists(this.IdNumber) &&
                !this.HasErrors && _salesValidation.IncompleteApplication(this.IdNumber))
            {
                this.Aggregator.GetEvent<CanContinueEvent>().Publish(true);
            }
            else
            {
                this.Aggregator.GetEvent<CanContinueEvent>().Publish(false);
            }

            if (_salesValidation.IdNumberExists(this.IdNumber) &&
                _salesValidation.CanUpgrade(this.IdNumber))
            {
                this.Aggregator.GetEvent<CanUpgradeEvent>().Publish(true);
            }
            else
            {
                this.Aggregator.GetEvent<CanUpgradeEvent>().Publish(false);
            }

            if (_salesValidation.IdNumberExists(this.IdNumber) &&
                _salesValidation.CanReInstate(this.IdNumber))
            {
                this.Aggregator.GetEvent<CanReinstateEvent>().Publish(true);
            }
            else
            {
                this.Aggregator.GetEvent<CanReinstateEvent>().Publish(false);
            }

            if (this.HasErrors)
            {
                this.Aggregator.GetEvent<CanCreateNewMembership>().Publish(false);
                this.Aggregator.GetEvent<CanContinueEvent>().Publish(false);
                this.Aggregator.GetEvent<CanUpgradeEvent>().Publish(false);
                this.Aggregator.GetEvent<CanReinstateEvent>().Publish(false);
            }
        }
    }

    private void Continue(string view)
    {
        if (view == ModuleViewConstants.PlanSelectionView)
            this.Aggregator.GetEvent<ShowViewEvent>().Publish(
            ModuleViewConstants.PlanSelectionView);
    }

    private void EventSubscriptions()
    {
        this.Aggregator.GetEvent<LoadLeadInfoEvent>().Subscribe(GetLeadInfo);
        this.Aggregator.GetEvent<RaiseCommandAndEventsEvent>().Subscribe(RaiseCommands);
        this.Aggregator.GetEvent<SearchEvent>().Subscribe(SearchedMembership);
        this.Aggregator.GetEvent<ContinueEvent>().Subscribe(Continue);
        this.Aggregator.GetEvent<SaveEvent>().Subscribe(SaveProgress);
    }

    bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
    {
        _membership = GetMembership(navigationContext);

        return _membership == null;
    }

    private Membership GetMembership(NavigationContext navigationContext)
    {
        if (navigationContext.NavigationService.Region.Context != null &&
            navigationContext.NavigationService.Region.Context is Membership)
            return (Membership)navigationContext.NavigationService.Region.Context;

        return null;
    }

    void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
    {
        var refId = (Thread.CurrentPrincipal as ICustomPrincipal).CustomIdentity.RefId;

        this.SaveProgress(refId);

        if (_membership != null)
        {
            navigationContext.NavigationService.Region.Context = _membership;
        }
    }

    void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
    {

    }

    private void SaveProgress(Guid refId)
    {
        var agentId = _uow.User.GetByRef(refId).Id;
        _mainMember = new Principal();

        if (_lead != null)
            Mapper.Map(_lead, _mainMember);

        if (_membership == null)
            _membership = new Membership(
                    Guid.NewGuid(),
                    _lead.PlanId.HasValue?_lead.PlanId : null,
                    null,
                    null,
                    null,
                    DateTime.Now,
                    agentId,
                    _mainMember.Id,
                    (int)BillingStatusEnum.BAFP,
                    (int)MembershipStatusEnum.PWS,
                    null,
                    null,
                    null);

        if (_mainMember != null)
        {
            //To Take out when Db is working
            var principalId = _uow.Principal.GetAll().Max(x => x.Id);
            _mainMember.Id = principalId + 1;

            _membership.Principal = _mainMember;
        }

        //To Take out when Db is working
        var id = _uow.Membership.GetAll().Max(x => x.Id);
        _membership.Id = id + 1;
     //===================================================\\


    }
    #endregion

    #region Commands
    #endregion

    #region EventHandlers
    #endregion 

    #region Constructors
    public PreQualificationViewModel(
        IEventAggregator aggregator,
        IUnityContainer container,
        IRegionManager regionManager,
        IGetSavviUow uow,
        IIdNumberValidation idNumberValidation,
        ISalesValidation salesValidation) : 
        base(aggregator, container)
    {
        _uow = uow;
        _regionManager = regionManager;
        _principal = Thread.CurrentPrincipal as ICustomPrincipal;
        _idNumberValidation = idNumberValidation;
        _salesValidation = salesValidation;
        EventSubscriptions();

        this.GenderList = new ObservableCollection<string>()
        {
            "Male",
            "Female"
        };
    }
    #endregion
}

请帮助!!!

0 个答案:

没有答案