2013-10-14 107 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

相關問題