c# - 如何使用 WPF MVVM 缩短代码?

标签 c# wpf mvvm

我不知道这个问题是否属于这里,如果不属于请告诉我,但我正在为 WPF 和 MVVM 苦苦挣扎。

所以现在我有一个具有大约 20 个属性的 Customer 类:

public class Customer 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    ...
}

例如,根据 MVVM,我必须在我的 ViewModel 中复制所有这些属性(我只添加了 name 属性以使问题不会太长。但考虑到我会将我的模型的所有 20 个属性添加到我的 ViewModel像下面这样):

public class CustomerViewModel : ViewModelBase
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged();
        }
    }
    ...
}

因此,您已经可以看到,仅使用该示例,我就会创建数百行代码。现在如果我需要将 View 的数据保存到数据库中,我会这样做:

private void SaveCustomer()
{
    Customer customer = new Customer();
    customer.Id = Id;
    customer.Name = Name;
    customer.Address = Address;
    ...
}

又是一大堆代码。如果我需要加载客户,我需要做同样的事情,只是相反,如果我需要清空所有属性,我需要设置每个属性 = null。

在我的项目中,我完全是这样做的,我不知道这是不是正确的方法,如果有请告诉我另一种方法。但这会创建数百行代码,而且我看不出这是如何维护的,因为使用那么多代码很容易失去跟踪。请告诉我是否有其他方法或者我的想法是否错误。

最佳答案

没有任何规则说您的模型 POCO 和 View 模型 POCO 必须不同。我只会使用 Customer,并拥有一个 View 模型:

public class CustomerPageViewModel
{
     public Customer Customer
     {
         //get/set
     }
}

这样,来自 UI 的任何更改都已经在该对象中,您可以将其传递给任何将保留更改的服务。 客户 可以 实现 INPC,但如果只有 UI 正在更改它,则没有必要。

顺便说一句;不要根据长度来衡量你的代码质量,有时你只是在虚拟机上有很多属性。根据维护、扩展等的难易程度来衡量它。

关于c# - 如何使用 WPF MVVM 缩短代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50888302/

相关文章:

c# - 集合依赖属性

wpf - 使用 IValueConverter 进行动态样式绑定(bind)

wpf - WPF(MVVM)菜单中的互斥(和可绑定(bind))复选框

asp.net-mvc - 如何使用 MVC 在 ASP.NET 上应用 MVVM?

c# - using block 中的异步处置

c# - DotNetZip 不从 WinZip 中提取最佳压缩

c# - 地铁倒计时器应用程序

c# - 如何从 WebAPI 响应 json 中删除 EF 的导航属性空数组?

c# - 我如何通知 wpf 拥有的窗口关闭?

silverlight - 在 Silverlight 3.0 中结合 .NET RIA 服务和 MVVM