我开始学习MVVM,并且已经看到如何使用相应的List<>数据绑定列表。在ViewModel中;现在我需要实现一个具有不同字段的表单,当用户单击一个按钮时,我必须将数据保存到本地数据库。 哪种“最mvvm”方法?我想在ViewModel中实现一个SaveItem(Item){}方法,在代码后面,按钮点击执行类似
的操作Item item=new Item();
item.field1=txt1.Text;
.....
.....
item.fieldn=txtn.Text;
myViewModel.SaveItem(item);
我认为必须有更清洁的方式......
答案 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
失去焦点时才会更新视图模型。这样,只要值发生变化,视图模型就会更新。在你的应用程序中使用任何有意义的东西。