如果您的视图模型包含多个模型(即十多个模型),每个模型都需要相同的功能(即绑定属性) - 唯一不同的是实际模型类型。他们每个人都有自己的绑定属性是否有意义,或者我应该将这个设计重新分解为更优雅的东西,比如模型字典,只需要一个绑定属性,键是与模型关联的字符串。或者有没有比字典更好的替代品?
我正在尝试总体上简化我的视图模型的设计,因此将不胜感激任何建议。
我有类似的事情
我有不同的类,例如CustomerData
,
我在 1 个名为 Collection 的集合中收集了所有这些类(显然),我从那里将集合设置为视图 dataContext 我只是使用正确的路径来引用我在我的 xaml 中需要的数据例如或者EmployeeData
OrderData
Text="{Binding Path=CustomerData.Name}"
Text="{Binding Path=EmployeeData.Name"}"
编辑回答评论:我有一个名为 Data 的类,它包含我的 OnPropertyChanged。每当我需要做某事时,如果数据发生更改,我只需在我创建数据的类或使用它的类中这么说。
collection.CustomerData.PropertyChanged += new PropertyChangedEventHandler(Customer_PropertyChanged);
也是我的一个类的一个例子: public class CustomerData : Data { private string company = ""; 私人字符串船=“”;私人字符串地址=“”;私人字符串城市=“”;私人字符串 zipCode = ""; 私人字符串国家=“”;私人字符串 btw_nmbr = ""; 私人布尔 isTempCustomer = true; 私人名单电话号码;私人列表电子邮件地址;
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
}