2009-11-04 4 views
0

Je me demande comment vous pourriez résoudre ce problème. J'ai la classe suivanteQuestion de conception: CollectionView pour chaque objet?

public class MyTask 
{ 
    public int CustomerID { get; set; } 
    public int ProjectID { get; set; } 
} 

public List<Project> AllProjects { get; set; } 
public class Project 
{ 
    public string ProjectName { get; set; } 
    public int CustomerID { get; set; } 
} 

maintenant au démarrage du programme, je charge tous les projets disponibles dans « AllProjects ». Ensuite, je lier la Collection à une zone de liste déroulante, où un utilisateur doit d'abord entrer le code client et en fonction de cela, le contrôle ComboBox pour les projets. Selon vous, quel est le meilleur moyen de le faire? Utilisation d'une vue de collection pour chaque tâche MyTask? Ce que je fais en ce moment, c'est que dans MyTask, j'ai un List AvailableProjects, qui est modifié chaque fois que MyTask.CustomerID est modifié, par exemple.

public int CustomerID { 
    get { return _customerID; } 
    set { _customerID = value; UpdateAvailableProjects(); } 
} 
private void UpdateAvailableProjects() 
{ 
    //Loop trough static.Main.AllProjects and check if Project.CustomerID == this.CustomerID); 
} 

Merci pour toute aide.

Vive

+0

Utilisez-vous WPF? ASP.NET MVC? Windows Forms? – jrista

+0

J'utilise WPF avec une structure MVVM –

+0

Quelle est notre classe ViewModel pour la vue en cours? Pourriez-vous poster le code pour cela? – jrista

Répondre

0

Pourquoi ne pas faire un client de classe et de là obtiennent tous les projets associés qui peuvent ensuite être chargés dans le combo.

public class Customer 
{ 
    private int customerId = 0; 
    public int CustomerId 
    { 
     get 
     { 
      return customerId; 
     } 
     set 
     { 
      customerId = value; 
     } 
    } 

    public List<Project> availableProjects 
    { 
     get 
     { 
      return getCustomerRelatedProjects(); 
     } 
    } 

    //you change the accessor here according to the needs 
    private List<Project> getCustomerRelatedProjects() 
    { 
     //do the processing here for Database hit or from the list you load at the program load etc. 
     return new List<Project>(); 
    } 

} 

public class Project 
{ 
    int projectId = 0; 

    public int ProjectId 
    { 
     get 
     { 
      return projectId; 
     } 
     set 
     { 
      projectId = value; 
     } 
    } 

    string projName = string.Empty; 
    public string ProjectName 
    { 
     get 
     { 
      return projName; 
     } 
     set 
     { 
      projName = value; 
     } 
    } 
} 
+0

Je recommanderais de ne pas utiliser cette méthode. Vous mélangez les préoccupations et créez des couplages entre les classes qui ne sont pas (et ne devraient peut-être pas) être couplées. Le modèle d'enregistrement actif, utilisé pour la classe Customer, est un anti-pattern lorsque vous considérez les principes de séparation des préoccupations et de responsabilité unique. – jrista