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

Save new form data back th the database

我正在尝试使用 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 正在创建 link,这就是保存数据的原因。我认为,具体来说,我的问题是当 link 不是使用 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;
            }

答案简单得令人尴尬。我需要将以下内容添加到构造函数

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