WPF-在MVVM中添加CRUD操作的位置

WPF-在MVVM中添加CRUD操作的位置,wpf,mvvm,Wpf,Mvvm,我是WPF新手,我正在尝试将MVVM模型实现到我的WPF应用程序中。我有这样一个场景:一个客户模型、一个客户视图、一个CustomerViewModel和一个Dbcontext类 模型客户.cs public partial class Customers { public int Id { get; set; } public string Customer { get; set; } } MyDbContext.cs public partial cl

我是WPF新手,我正在尝试将MVVM模型实现到我的WPF应用程序中。我有这样一个场景:一个客户模型、一个客户视图、一个CustomerViewModel和一个Dbcontext类

模型客户.cs

 public partial class Customers
 {
     public int Id { get; set; }
     public string Customer { get; set; }     
 }
MyDbContext.cs

 public partial class MyDbContext: DbContext
    {
        public MyDbContext()
        {
        }

        public MyDbContext(DbContextOptions<MyDbContext> options)
            : base(options)
        {
        }

        public virtual DbSet<Customers> Customers { get; set; }
        public virtual DbSet<Users> Users{ get; set; }



        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                   // ..............
            }
        }

CustomerViewModel.cs

 class CustomersViewModel
    {
        public ObservableCollection<Customers> Customers { get; set; }

        public CustomersViewModel()
        {

            using (MyDbContext db = new MyDbContext())
            {
                Customers = new ObservableCollection<Customers>(db.Customers.ToList());
            }
        }
    }
在我的视图中,我将ViewModel绑定到一个组合框:

<Window.Resources>
        <ViewModels:CustomersViewModel x:Key="CustomerViewModel"/>
    </Window.Resources>
...

  <ComboBox x:Name="cboCustomers" Grid.Row="2" 
                          DataContext="{StaticResource CustomerViewModel}" 
                          ItemsSource="{Binding Customers}" 
                          DisplayMemberPath="Customer"/>
这个很好用。然而,这可能是一个愚蠢的问题,如果我想添加更多的查询,例如按Id检索客户、按特定列对客户进行分组或更新客户,我需要在哪里添加这些查询

   Customers = new ObservableCollection<Customers>(db.Customers.Where(....))..

在Viewmodel类中?目前,ViewModel的构造函数获取所有客户

如果我想添加更多查询,如按Id检索客户、按特定列对客户分组或更新客户,我需要在哪里添加这些查询

   Customers = new ObservableCollection<Customers>(db.Customers.Where(....))..

例如,在注入视图模型的服务中,例如:

class CustomersViewModel
{
    private readonly ICustomerService _customerService;

    public ObservableCollection<Customers> Customers { get; set; }

    public CustomersViewModel(ICustomerService customerService)
    {
        _customerService = customerService;
    }
}
然后,视图模型可以基于用户交互(例如按钮单击)调用服务上的操作


服务实现负责连接到数据库,例如通过数据访问层使用Entity Framework。

创建一个新类,例如DBLayer类,您将在其中拥有所有这些方法。让您的ViewModel实例化这个类的一个对象,并在需要时使用它的方法。嗨,感谢您为我指明了正确的方向。我已经用我需要的所有方法创建了服务,但是我仍然不确定如何从ViewModel调用这些方法。你能给我举个例子说明如何做到这一点吗?@Leño77:你只需使用视图模型注入的引用调用服务的一个方法,例如_customerService.GetCustomers。何时何地执行此操作是另一个主题,但要翻译原始代码示例,您需要在构造函数中执行此操作。