将新的表单数据保存回数据库

时间:2019-03-21 16:07:02

标签: c# wpf mvvm mvvm-light

我正在尝试使用MVVM模式将新的表单数据保存回数据库。我有一个名为Person的模型,并且在PersonViewModel中,可以通过执行此操作将值成功添加到表单中

    public void LoadPerson()
    {
        Person p = new Person();
        p.LastName = "Servo";
        p.FirstName = "Tommy";
        p.Address = "123 Main St";
        p.City = "Somewhere";
        p.State = "MI";
        p.ZipCode = "55555";
        CurrentPerson = p;
    }

其余的ViewModel看起来像这样

    public PersonViewModel()
    {
        LoadCommand = new RelayCommand(LoadPerson);
        SaveCommand = new RelayCommand(SavePerson);
        OpenCommand = new RelayCommand(OpenPerson);
        EncryptCommand = new RelayCommand(EncryptPerson);
        DecryptCommand = new RelayCommand(DecryptPerson);
    }

    private Person currentPerson;
    public Person CurrentPerson
    {
        get { return currentPerson; }
        set
        {
            if (value != currentPerson)
            {
                currentPerson = value;
                RaisePropertyChanged();
            }
        }
    }

    public ICommand DecryptCommand { get; private set; }
    public ICommand EncryptCommand { get; private set; }
    public ICommand LoadCommand { get; private set; }
    public ICommand OpenCommand { get; private set; }
    public ICommand SaveCommand { get; private set; }

因此,我可以使用LoadCommand将数据获取到表单。如果使用SaveCommand更改任何表单数据(使用LoadCommand时),则可以将更改成功保存回数据库。我不能做的是在表单上没有数据时开始保存数据。

编辑为了澄清,我的意思是,当我打开表单后逐个字段手动填写表格时,输入的数据不会保存。由于我可以在填写表单后保存更改后的数据(使用LoadCommand将虚拟数据放入其中)。我确定是因为在第一次打开表单时,我没有做正确的事情将文本字段绑定到ViewModel。

LoadCommand正在创建链接,这就是为什么要保存数据的原因。我认为,特别是我的问题是,当未使用LoadCommand创建链接时,SaveCommand无法创建链接。 结束编辑

我正在检查一个空的CurrentPerson,以便在不使用LoadCommand加载它时可以填充它,但是我不知道如何在没有初始加载的情况下对其进行水化处理。如何使Currentperson等于下面的代码块中的表单数据? (假设我就是在这里做的)

            if (CurrentPerson == null)
            {
                //Person person = CurrentPerson;
                //CurrentPerson = this.currentPerson;
                //string fn = CurrentPerson.FirstName;
                //Console.WriteLine(fn);
                //Person person = new Person();
                //person.FirstName =  ;
                //CurrentPerson = person;
            }

1 个答案:

答案 0 :(得分:0)

答案很简单。我需要将以下内容添加到构造函数中

        Person p = new Person();
        CurrentPerson = p;