public LoginOrRegisterWindowViewModel() { Title = GetTitleByDisplayName(DisplayName); ChooseChannel = ReactiveCommand.CreateFromTask <string>(async channel_ => { if (Enum.TryParse <FastLoginChannel>(channel_, out var channel)) { CurrentSelectChannel = channel_; ChangeLoginState(3); await ThirdPartyLoginHelper.StartAsync(this, channel, isBind: false); } else { switch (channel_) { case FastLoginChannelViewModel.PhoneNumber: ChangeLoginState(1); break; } } }); ManualLogin = ThirdPartyLoginHelper.ManualLogin; SendSms = ReactiveCommand.CreateFromTask(SendSmsAsync); Submit = ReactiveCommand.CreateFromTask(SubmitAsync); OpenHyperlink = ReactiveCommand.Create <string>(OpenHyperlink_); //SteamConnectService.Current.WhenAnyValue(x => x.CurrentSteamUser) // .Subscribe(_ => this.RaisePropertyChanged(nameof(SteamUser))); fastLoginChannels = new(GetFastLoginChannels()); }
public UserProfileWindowViewModel() { Title = GetTitleByDisplayName(DisplayName); userManager = DI.Get <IUserManager>(); Initialize_Ctor(); async void Initialize_Ctor() { this.InitAreas(); userInfoSource = await userManager.GetCurrentUserInfoAsync() ?? new UserInfoDTO(); userInfoValue = Serializable.SMP(userInfoSource); // (SetFields)DTO => VM _UID = userInfoSource.Id.ToString(); _NickName = userInfoSource.NickName; _Gender = userInfoSource.Gender; _BirthDate = userInfoSource.GetBirthDate(); if (userInfoSource.AreaId.HasValue) { this.SetAreaId(userInfoSource.AreaId.Value); } userInfoSource = Serializable.DMP <UserInfoDTO>(userInfoValue) ?? throw new ArgumentNullException(nameof(userInfoSource)); // IsModifySubscribe void SubscribeOnNext <T>(T?value, Action <T?> onNext) { onNext(value); DetectionIsModify(); } void SubscribeFormItem <T>(Expression <Func <UserProfileWindowViewModel, T?> > expression, Action <T?> onNext) => this.WhenValueChanged(expression, false).Subscribe(value => SubscribeOnNext(value, onNext)).AddTo(this); SubscribeFormItem(x => x.NickName, x => userInfoSource.NickName = x ?? string.Empty); SubscribeFormItem(x => x.Gender, x => userInfoSource.Gender = x); SubscribeFormItem(x => x.BirthDate, x => userInfoSource.SetBirthDate(x)); void SubscribeAreaOnNext(IArea?area) { var areaId = area?.Id; userInfoSource.AreaId = (!areaId.HasValue || areaId.Value == AreaUIHelper.PleaseSelect.Id) ? this.GetSelectAreaId() : areaId; } SubscribeFormItem(x => x.AreaSelectItem2, SubscribeAreaOnNext); SubscribeFormItem(x => x.AreaSelectItem3, SubscribeAreaOnNext); SubscribeFormItem(x => x.AreaSelectItem4, SubscribeAreaOnNext); } OnBindFastLoginClick = ReactiveCommand.CreateFromTask <string>(async channel_ => { if (Enum.TryParse <FastLoginChannel>(channel_, out var channel)) { CurrentSelectChannel = channel_; await ThirdPartyLoginHelper.StartAsync(this, channel, isBind: true); } }); OnManualLoginClick = ThirdPartyLoginHelper.ManualLogin; OnUnbundleFastLoginClick = ReactiveCommand.CreateFromTask <string>(async channel_ => { if (Enum.TryParse <FastLoginChannel>(channel_, out var channel)) { await OnUnbundleFastLoginClickAsync(channel); } }); OnCancelBindFastLoginClick = ReactiveCommand.Create(HideFastLoginLoading); UIDCommand = ReactiveCommand.CreateFromTask(async() => { await IApplication.CopyToClipboardAsync(_UID); }); }