首页 > 解决方案 > 如何在不手动设置的情况下将绑定属性作为参数传递

问题描述

这是我的App.xaml.cs

protected override Task OnInitializeAsync(IActivatedEventArgs args) {
        Container.RegisterInstance(SessionStateService);
        Container.RegisterInstance(NavigationService);

        Container.RegisterType<IUserRepository, UserRespository>(new ContainerControlledLifetimeManager());
        Container.RegisterType<UserSettingsContext>(new ContainerControlledLifetimeManager());
        Container.RegisterType<IUserSettings, UserSettings>(new ContainerControlledLifetimeManager());

        var userSettings = this.Container.Resolve<UserSettingsContext>();
        userSettings.Database.EnsureCreated();

        return base.OnInitializeAsync(args);
    }

这是我的用户设置

using using Prism.Windows.Validation;

public class UserSettings : ValidatableBindableBase, IUserSettings {
    private string _firstName;
    public string FirstName {
        get { return _firstName; }
        set { SetProperty(ref _firstName, value); }
    }

    private string _lastName;
    public string LastName {
        get { return _lastName; }
        set { SetProperty(ref _lastName, value); }
    }

    private UserType _userType;
    public UserType UserType {
        get { return _userType; }
        set { SetProperty(ref _userType, value); }
    }

    private string _username;
    [Required(ErrorMessage = "Required.")]
    public string Username {
        get { return _username; }
        set { SetProperty(ref _username, value); }
    }

    private string _password;
    [Required(ErrorMessage = "Required.")]
    public string Password {
        get { return _password; }
        set { SetProperty(ref _password, value); }
    }
}

视图模型

public class TestViewModel : UserSettings {
    private UserSettings user;
    public UserSettings User => user;

    public async void SaveSettings() {
        //It will work with this line
        // var user = new UserSettings() {
            // Username= this.Username,
            // Password= this.Password,
            // UserType= this.UserType,
            // FirstName= this.FirstName,
            // LastName= this.LastName
        // };

        //null properties
        await loginService.SaveUserSettings(user);
    }
}

当我尝试传递“用户”时,属性为空,即使是来自 UI(视图)的用户输入数据,如果我使用上面的代码设置UserSettings,它将起作用,但我想在没有它的情况下简化它,我该怎么做那?

谢谢

标签: c#entity-frameworkmvvmuwpprism

解决方案


你想写await loginService.SaveUserSettings(this);是因为this它似乎是充满数据的目标。


推荐阅读