从视图输入创建对象并将其传递给视图模型(在 MVVM 中)



最近我正在使用MVVM概念开发我的第一个项目(我使用WPF)。在我开始编写代码之前,我已经阅读了许多关于MVVM的教程(例如著名的 J.Smith 教程)。在我开始编码之前,我读到的所有内容都很清楚......

问题很简单:在视图层中,我有一个带有TextBoxes 的表单。假设几个TextBoxes,即:姓名姓氏电话号码。当用户填写所有这些并单击"确定"按钮时,我想将新人员(具有指定的个人详细信息)添加到我的本地数据库(我使用实体框架作为ORM)。

为此,我需要写这样的东西:

<Button Name="MyButton" Command="MyRelayCommandWhichNeedsAllOfTheTextboxes" Content="OK" />

使用CommandParameter我可以将一个对象从视图传递到视图模型。有很多文本框,所以这可能不是一个好主意。

XAML我可以分配给需要用户填写CommandParameter整个表单。但是,在ViewModel中,我需要知道所有文本框的名称。MVVM 中的主要假设是所有层(视图、视图模型和模型)都必须是独立的。

最好的解决方案是什么?如何将输入数据从表单传递到ViewModel

我建议将 relay 命令作为视图模型的一部分 - 这样,当命令被触发时,您将可以访问所需的所有属性。

XAML:

<Button Name="SurnameTextBox" Text="{Binding Surname,Mode=TwoWay}" />
<Button Name="MyButton" Command="{Binding MyRelayCommand}" Content="OK" />

查看模型:

public class MyViewModel : INotifyPropertyChanged
{
// (note, raise property changed on the setter
public string Surname { get; set; }
public ICommand MyRelayCommand { get; set; }
public MyViewModel
{
// set the command callback here
MyRelayCommand = new RelayCommand(OKCommandHandler); 
}
private void OKCommandHandler(object parameter)
{
// save the record here using Surname, etc
// (note that you don't even need to use parameter, so you can just ignore it)
}
}

您不需要将数据从表单传递到视图模型,因为您的视图模型已准备好所有数据。

视图模型通过属性向视图公开所有数据,并绑定到视图。 看看Dbaseman的答案。

相关内容

  • 没有找到相关文章

最新更新