0

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

问题很简单:在视图层我有一个带有TextBoxes 的表单。比方说几个TextBoxes,即:Name , Surname , Phone number。当用户填写所有这些并单击OK -按钮时,我想将新人(具有指定的个人详细信息)添加到我的本地数据库(我使用Entity Framework作为ORM)。

为此,我需要编写如下内容:

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

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

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

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

4

2 回答 2

1

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

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)
    }
}
于 2012-11-05T18:14:28.980 回答
1

您不需要将数据从表单传递到 viewmodel,因为您的 viewmodel 已经拥有所有数据。

您的视图模型通过属性将所有数据公开给您的视图并绑定到它。看看 dbaseman 的回答。

于 2012-11-05T18:39:35.543 回答