【发布时间】:2019-03-21 16:07:01
【问题描述】:
我正在尝试使用 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 没有创建链接。 结束编辑
我正在检查 null 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;
}
【问题讨论】:
标签: c# wpf mvvm mvvm-light