最近,我正在使用 MVVM 概念开发我的第一个项目(我使用 WPF )。在开始编写代码之前,我已经阅读了许多关于 MVVM 的教程(例如,着名的J.Smith's)。在我开始编码之前,我所读到的一切都很清楚......
问题很简单:在 View 图层中,我有一个TextBox
es的表单。我们假设一些TextBox
es,即:姓名,姓氏,电话号码。当用户填写所有内容并点击确定按钮时,我想将新人(带有指定的个人详细信息)添加到我的本地数据库(我使用实体框架为ORM)。
要做到这一点,我需要写这样的东西:
<Button Name="MyButton" Command="MyRelayCommandWhichNeedsAllOfTheTextboxes" Content="OK" />
使用CommandParameter
我可以将一个对象从 View 传递到 ViewModel 。有很多文本框,所以它可能不是一个好主意。
从 XAML 我可以分配到需要由用户填写的CommandParameter
整个表单。但是,在 ViewModel 中,我需要知道所有文本框的名称。 MVVM中的主要假设是所有层(View,ViewModel和Model)必须是独立的。
什么是最好的解决方案?如何将输入数据从表单传递到 ViewModel ?
答案 0 :(得分:1)
我建议将relay命令作为View Model的一部分 - 这样,当命令被触发时,您将可以访问所需的所有属性。
<强> 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)
}
}
答案 1 :(得分:1)
您不需要将数据从表单传递到viewmodel,因为您的viewmodel已经拥有了所有数据。
您的viewmodel会将所有数据通过属性公开给您的视图并绑定到它。看看dbaseman的答案。