2013-10-14 71 views
0

如果您有一个包含多个模型(即十个加号)的视图模型,每个模型都需要相同的功能(即绑定属性) - 唯一不同的是实际的模型类型。它们对每个人都有其自己的绑定属性是有意义的,还是应该将这个设计重新分配到一些更优雅的模型字典中,只需要一个绑定属性,而关键字是与模型关联的字符串。或者,有没有比字典更好的选择?我应该如何设计一个包含许多模型的视图模型?

我试图简化我的视图模型的设计一般,所以任何意见将不胜感激。

+1

请添加代码示例。另外,考虑在codereview.stackexchange.com上询问这个问题。 –

+0

“绑定属性”究竟是什么?你可以将数据绑定到属性,但并不真正使这些属性变得特别。你的意思是依赖属性?您不需要具有依赖属性来使其可绑定。对于普通模型,你应该考虑实现'INotifyPropertyChanged'。 – poke

+2

如何为你的模型定义一个通用的类或接口,然后保留它们的'List <>'? – Shoe

回答

0

我也有过类似的事情

我有不同的类别,如CustomerDataEmployeeDataOrderData 我收集了1个集名为集(显然)所有这些类 和我收集从那里设置的意见的DataContext对我只是用正确的道路,引用我需要在我的XAML例如Text="{Binding Path=CustomerData.Name}"Text="{Binding Path=EmployeeData.Name"}"

编辑回答评论数据: 我有一类叫做数据这conatians我的OnPropertyChanged。 当我需要做某些事情时,如果数据发生变化,我只是在创建数据的类中或在使用它的类中说这些。

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

也是我的一个类的实例: 公共类CustomerData:数据 { 私人字符串公司= “”; private string ship =“”; private string adress =“”; private string city =“”; 私人字符串zipCode =“”; private string country =“”; private string btw_nmbr =“”; private bool isTempCustomer = true; 私人列表phoneNumbers; private List电子邮件地址;

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 
} 
+0

感谢您的回复,但有一件事是,您是如何管理模型更改的(即INotifyPropertyChanged),您是否称过整个更改采集?肯定这将是相当昂贵的? – Sam

+0

我的编辑回答你的问题? p.s. 你也可以使用abstarct类Data创建一个列表数据,但是你必须检查以获得正确的数据对象,如下所示:foreach(data d in data){if(d is Customer)} – Vincent

相关问题