我的窗口中有一个DataGrid和两个ListBoxes。我正在使用Entity Framework连接到我的SQL Server。根据我在ListBoxes中所做的选择,参数将被传递给我的存储过程,并且将检索我的DataGrid的数据。我能够在不使用MVVM的情况下实现此功能。我想知道使用MVVM实现此方法的方法。请帮帮我。在此先感谢。
答案 0 :(得分:4)
首先,MVVM是关于将代码的关注点分离到适当的区域。例如,通过EF与您的数据库通信应该在Model 1 中完成。 ViewModel负责保存数据,并对其进行整形或按摩以使其更适合显示(即将枚举转换为颜色 2 等)。
要以MVVM方式实现您的功能,您需要使用绑定,并将您的viewmodel绑定到您的视图:
<MyControl>
<LayoutRoot>
<ListBox ItemsSource={Binding MyItems} SelectedItem={Binding MySelection} />
</LayoutRoot>
</MyControl>
在视图背后的代码中:
public class MyControl
{
public MyControl()
{
this.DataContext = new MyViewModel();
}
}
你的ViewModel看起来像这样:
public class MyViewModel : INotifyPropertyChanged
{
public ObservableCollection<MyDataObject> MyItems
{
get { return _myItems; }
set
{
_myItems = value;
OnPropertyChanged("MyItems");
}
}
public MyDataObject MySelection { get; set; }
public void DoSomethingWithDatabase()
{
Model.DoSomething(MySelection);
}
}
这只是一个非常简单的例子来说明如果你以MVVM的方式做事情需要什么(我故意错过了一堆东西)。要做一个正确的示例并记录您需要知道的所有基本位,至少需要一本书中的一章,因此我将向您推荐MSDN文章以供进一步阅读: Implementing the Model-View-ViewModel Pattern
1 如果你也实施SOA,模型可能只是一个垫脚石,模型可能只是调用一个服务,然后与数据库进行对话。
2 这也可以在视图中使用Converters完成,但在转换器中可能并不总是可行或不实用。