我用这边创建我的演示应用程序 http://windowsclient.net/learn/video.aspx?v=314683
该网站在启动时非常有用,在他们的示例中,他们创建了一个名为EmployeeRepository.cs的文件,该文件似乎是数据的来源。在他们的示例中,数据在代码中是硬连线的。所以我正在尝试学习如何从数据源(如数据库)获取数据。在我的具体情况下,我想从Microsoft Access DB获取数据。 (只读,所以我只会使用SELECT命令。)
using System.Collections.Generic;
using Telephone_Directory_2010.Model;
namespace Telephone_Directory_2010.DataAccess
{
public class EmployeeRepository
{
readonly List<Employee> _employees;
public EmployeeRepository()
{
if (_employees == null)
{
_employees = new List<Employee>();
}
_employees.Add(Employee.CreateEmployee("Student One", "IT201", "Information Technology", "IT4207", "Building1", "Room650"));
_employees.Add(Employee.CreateEmployee("Student Two", "IT201", "Information Technology", "IT4207", "Building1", "Room650"));
_employees.Add(Employee.CreateEmployee("Student Three", "IT201", "Information Technology", "IT4207", "Building1", "Room650"));
}
public List<Employee> GetEmployees()
{
return new List<Employee>(_employees);
}
}
}
我找到了另一个使用Access DB但不符合MVVM的示例。所以我试图弄清楚如何将DB文件添加到项目中,如何将其连接起来并将其绑定到列表框(我还没有那么远)。以下是我修改过的文件
using System.Collections.Generic;
using Telephone_Directory_2010.Model;
// integrating new code with working code
using Telephone_Directory_2010.telephone2010DataSetTableAdapters;
using System.Windows.Data;
namespace Telephone_Directory_2010.DataAccess
{
public class EmployeeRepository
{
readonly List<Employee> _employees;
// start
// integrating new code with working code
private telephone2010DataSet.telephone2010DataTable employeeTable;
private CollectionView dataView;
internal CollectionView DataView
{
get
{
if (dataView == null)
{
dataView = (CollectionView) CollectionViewSource.GetDefaultView(this.DataContext);
}
return dataView;
}
}
public EmployeeRepository()
{
if (_employees == null)
{
_employees = new List<Employee>();
}
telephone2010TableAdapter employeeTableAdapter = new telephone2010TableAdapter();
employeeTable = employeeTableAdapter.GetData();
this.DataContext = employeeTable;
}
public List<Employee> GetEmployees()
{
return new List<Employee>(_employees);
}
}
}
构建
时收到以下错误消息错误1'Teleder_Directory_2010.DataAccess.EmployeeRepository'不包含'DataContext'的定义,也没有找到接受类型为'Telephone_Directory_2010.DataAccess.EmployeeRepository'的第一个参数的扩展方法'DataContext'(你是否错过了使用指令或程序集引用?)C:\ Projects \ VS2010 \ Telephone Directory 2010 \ Telephone Directory 2010 \ DataAccess \ EmployeeRepository.cs 23 90电话簿2010
答案 0 :(得分:2)
MVVM模式应该建议三层:
Model(= Data-access):从数据库中检索数据,这里应该是你的EmployeeRepository。我建议不要在这里使用任何特定于视图的组件,即没有CollectionView。最好只将员工放在List或ObservableCollection中。
ViewModel:在这里,您可以为视图或实现命令准备数据,视图可以使用这些命令来检索或操作数据等。 在您的示例中,这应该是一些EmployeeViewModel,它从DataAccess-Layer检索所有员工并使其可用作公共属性,以便视图可以绑定到它。不要在此处放置特定于数据库的代码,这些代码应完全包含在数据访问层中。
查看:您的员工 - 包含所有UI内容,按钮和所有内容的视图。当然,您可以在此处放置一些datagrid或ItemsControl,它们绑定到ViewModel并显示其数据。视图的datacontext应该是您的ViewModel,至少这是最常用的方法。
答案 1 :(得分:1)