使用MVVM的WPF中的数据输入过程

时间:2012-09-28 13:14:54

标签: wpf mvvm

我开始学习MVVM,并且已经看到如何使用相应的List<>数据绑定列表。在ViewModel中;现在我需要实现一个具有不同字段的表单,当用户单击一个按钮时,我必须将数据保存到本地数据库。 哪种“最mvvm”方法?我想在ViewModel中实现一个SaveItem(Item){}方法,在代码后面,按钮点击执行类似

的操作
Item item=new Item();
item.field1=txt1.Text;
.....
.....
item.fieldn=txtn.Text;
myViewModel.SaveItem(item);

我认为必须有更清洁的方式......

1 个答案:

答案 0 :(得分:2)

Button的{​​{1}}类型DependencyProperty名为ICommand,如果设置了此属性,则在点击CommandProperty时将调用该命令

通常在MVVM中,一个公开类型为Button的属性(您需要创建一个实现或从框架中获取一个实现)并在XAML中绑定它,如下所示:

ICommand

视图模型:

<Button Content="My Button"
        Command="{Binding MyCommand}" />

现在您不需要代码隐藏。

至于获取要保存的文本,再次希望将数据绑定添加到视图模型而不是代码隐藏。

而不是阅读public class MyViewModel : INotifyPropertyChanged { public ICommand MyCommand { get { … } } … } ,而是将该属性绑定到您的视图模型。

视图模型:

TextBox.Text

XAML:

public class MyViewModel : INotifyPropertyChanged
{
  …

    private string _myText;
    public string MyText
    {
        get { return _myText; }
        set 
        {
            _myText = value;
            // raise property change notification
        }
}

请注意,我们正在使用<TextBox Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 绑定模式。这样,viewmodel中的更改可以反映在TwoWay中(这就是您需要实现TextBox的原因),并且INotifyPropertyChanged中的更改将传播到视图模型。

我还添加了TextBox设置,因为默认情况下,只有在UpdateSourceTrigger失去焦点时才会更新视图模型。这样,只要值发生变化,视图模型就会更新。在你的应用程序中使用任何有意义的东西。