【问题标题】:Building reusable CRUD controls in WPF and MVVM在 WPF 和 MVVM 中构建可重用的 CRUD 控件
【发布时间】:2012-01-20 18:49:21
【问题描述】:

我正在构建一个 WPF Prism MVVM 应用程序。

此应用程序将包含大量 CRUD 窗口。

我想优化该窗口的功能(并减少生成的代码量)。

我已经使用了一种方法,在该方法中,我创建了一个具有默认功能的“母版页”,并包含一个保留区域,用于“注入”可能属于特定实体的不同子控件。我正在尝试在this question 中学习如何在 WPF 中执行此操作。

但我想知道的是:使用 WPF 和 MVVM(或控件)完成此任务的模式是什么?

【问题讨论】:

    标签: wpf mvvm prism


    【解决方案1】:

    构建一个接口,您的所有 CRUD ViewModel 都将从该接口继承,并让您的通用 ViewModel 使用该接口来执行 CRUD 操作

    下面是接口和类的外观示例:

    // Generic interface
    public interface IGenericViewModel
    {
        bool Add();
        bool Save();
        bool Delete();
    }
    
    // Generic CRUD ViewModel
    public class GenericViewModel
    {
        public IGenericViewModel ObjectViewModel { get; set; }
    
        public RelayCommand AddCommand { get ; }
        public RelayCommand SaveCommand { get ; }
        public RelayCommand DeleteCommand { get ; }
    
        void Add()
        {
            ObjectViewModel.Add();
        }
    
        void Save()
        {
            ObjectViewModel.Save();
        }
    
        void Delete()
        {
            ObjectViewModel.Delete();
        }
    }
    
    // Specific object ViewModel used by generic CRUD ViewModel
    public class CustomerViewModel : ViewModelBase, IGenericViewModel
    {
    
        bool IGenericViewModel.Add()
        {
            // Add logic
        }
    
        bool IGenericViewModel.Save()
        {
            // Save logic
        }
    
        bool IGenericViewModel.Delete()
        {
            // Delete object
        }
    
    }
    

    【讨论】:

    • 好主意。我已经考虑过使用接口的想法,但我仍然不明白它将如何绑定到视图。
    【解决方案2】:

    看看这个通用控件WPFCrudControl,可能对你有用。

    基于 MVVM 模式实现的通用 WPF CrudControl。它为简单的 CRUD 操作(添加、编辑、删除、验证、带有排序、分页和搜索的列表)提供了巨大的生产力提升。该控件抽象了 UI 和业务逻辑,因此它只需要相对较少的编码工作,同时可以自定义其行为。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 1970-01-01
      • 2016-08-08
      • 2011-07-13
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      相关资源
      最近更新 更多