我应该如何设计具有许多模型的视图模型
本文关键字:模型 许多 视图 我应该 | 更新日期: 2023-09-27 18:35:20
如果你有一个视图模型,其中包含许多模型(即十多个模型),每个模型都需要相同的功能(即绑定属性) - 唯一不同的是实际的模型类型。它们中的每一个都有自己的绑定属性是否有意义,或者我应该将此设计重构为更优雅的东西,例如模型字典,只需要一个绑定属性,并且键是与模型关联的字符串。还是有更好的字典替代品?
我正在尝试简化视图模型的设计,因此任何建议将不胜感激。
我也有类似的事情
我有不同的类,如CustomerData
、EmployeeData
、OrderData
我将所有这些类收集在一个名为集合的集合中(显然)我从那里将集合设置为视图 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
}