我应该如何设计具有许多模型的视图模型

本文关键字:模型 许多 视图 我应该 | 更新日期: 2023-09-27 18:35:20

如果你有一个视图模型,其中包含许多模型(即十多个模型),每个模型都需要相同的功能(即绑定属性) - 唯一不同的是实际的模型类型。它们中的每一个都有自己的绑定属性是否有意义,或者我应该将此设计重构为更优雅的东西,例如模型字典,只需要一个绑定属性,并且键是与模型关联的字符串。还是有更好的字典替代品?

我正在尝试简化视图模型的设计,因此任何建议将不胜感激。

我应该如何设计具有许多模型的视图模型

我也有类似的事情

我有不同的类,如CustomerDataEmployeeDataOrderData我将所有这些类收集在一个名为集合的集合中(显然)我从那里将集合设置为视图 dataContext,我只是使用正确的路径来引用我的 xaml 中需要的数据,例如 Text="{Binding Path=CustomerData.Name}"Text="{Binding Path=EmployeeData.Name"}"

编辑以回答评论:我有一个名为 Data 的类,它使我的 OnPropertyChanged 成为可能。每当我需要在数据更改时执行某些操作时,我只需在创建数据的类或使用它的类中说出来。

collection.CustomerData.PropertyChanged += new PropertyChangedEventHandler(Customer_PropertyChanged);

也是我的一个类的例子: 公共类 客户数据 : 数据 { 私人字符串公司 ="; 私人弦船 ="; 专用字符串地址 ="; 私人字符串城市 ="; 私有字符串邮政编码 = "; 私有字符串国家 ="; 私有字符串 btw_nmbr = "; 私有布尔值是临时客户 = 真; 私人列表电话号码; 私人列表电子邮件地址;

    private string fileName;
    #region public methods
    public string Company
    {
        get
        {
            return company;
        }
        set
        {
            if (company.Trim() != value.Trim())
            {
                company = value;
                OnPropertyChanged("Company");
            }
        }
    }
    public string Ship
    {
        get
        {
            return ship;
        }
        set
        {
            if (ship.Trim() != value.Trim())
            {
                ship = value;
                OnPropertyChanged("Ship");
            }
        }
    }
    public string Adress
    {
        get
        {
            return adress;
        }
        set
        {
            if (adress.Trim() != value.Trim())
            {
                adress = value;
                OnPropertyChanged("Adress");
            }
        }
    }
    public string City
    {
        get
        {
            return city;
        }
        set
        {
            if (city.Trim() != value.Trim())
            {
                city = value;
                OnPropertyChanged("City");
            }
        }
    }
    public string ZipCode
    {
        get
        {
            return zipCode;
        }
        set
        {
            if (zipCode.Trim() != value.Trim())
            {
                zipCode = value;
                OnPropertyChanged("ZipCode");
            }
        }
    }
    public string Country
    {
        get
        {
            return country;
        }
        set
        {
            if (country.Trim() != value.Trim())
            {
                country = value;
                OnPropertyChanged("Country");
            }
        }
    }
    public string BTW_Nmbr
    {
        get
        {
            return btw_nmbr;
        }
        set
        {
            if (btw_nmbr.Trim() != value.Trim())
            {
                btw_nmbr = value;
                OnPropertyChanged("BTW_Nmbr");
            }
        }
    }
    public bool IsTempCustomer
    {
        get
        {
            return isTempCustomer;
        }
        set
        {
            isTempCustomer = value;
            OnPropertyChanged("IsTempCustomer");
        }
    }
    public List<ContactData> PhoneNumbers
    {
        get
        {
            return phoneNumbers;
        }
        set
        {
            phoneNumbers = value;
            OnPropertyChanged("PhoneNumbers");
        }
    }
    public void AddPhoneNumber(ContactData cd)
    {
        phoneNumbers.Add(cd);
        OnPropertyChanged("PhoneNumbers");
    }
    public List<ContactData> EmailAdresses
    {
        get
        {
            return eMailAdresses;
        }
        set
        {
            eMailAdresses = value;
            OnPropertyChanged("EmailAdresses");
        }
    }
    public void AddEmailAdress(ContactData cd)
    {
        eMailAdresses.Add(cd);
        OnPropertyChanged("EmailAdresses");
    }
    public string FileName
    {
        get
        {
            return fileName;
        }
        set
        {
            fileName = value;
            OnPropertyChanged("FileName");
        }
    }
    #endregion
}