2010-03-28 6 views
0

J'essaie de modifier mes objets pour faire un modèle de collection hiérarchique. J'ai besoin d'aide. Mes objets sont bons et GoodCategory:Comment puis-je modifier mes classes pour utiliser ses collections dans WPF TreeView

public class Good 
     { 
      int _ID; 
      int _GoodCategory; 
      string _GoodtName; 

      public int ID 
      { 
       get { return _ID; } 
      } 

      public int GoodCategory 
      { 
       get { return _GoodCategory; } 
       set 
       { 
        _GoodCategory = value; 
       } 
      } 

      public string GoodName 
      { 
       get { return _GoodName; } 
       set 
       { 
        _GoodName = value; 
       } 
      } 

      public Good(IDataRecord record) 
      { 
       _ID = (int)record["ID"]; 
       _GoodtCategory = (int)record["GoodCategory"]; 
      } 
    } 

    public class GoodCategory 
    { 
     int _ID; 
     string _CategoryName; 

     public int ID 
     { 
      get { return _ID; } 
     } 

     public string CategoryName 
     { 
      get { return _CategoryName; } 
      set 
      { 
       _CategoryName = value; 
      } 
     } 

     public GoodCategory(IDataRecord record) 
     { 
      _ID = (int)record["ID"]; 
      _CategoryName = (string)record["CategoryName"]; 
     } 
    } 

et moi avons deux collections de ces objets:

public class GoodsList : ObservableCollection<Good> 
     { 
      public GoodsList() 
      { 
       string goodQuery = @"SELECT `ID`, `ProductCategory`, `ProductName`, `ProductFullName` FROM `products`;"; 

       using (MySqlConnection conn = ConnectToDatabase.OpenDatabase()) 
       { 
        if (conn != null) 
         { 
          MySqlCommand cmd = conn.CreateCommand(); 
          cmd.CommandText = productQuery; 

          MySqlDataReader rdr = cmd.ExecuteReader(); 
          while (rdr.Read()) 
          { 
           Add(new Good(rdr)); 
          } 
         } 
       } 
      } 
     } 

public class GoodCategoryList : ObservableCollection<GoodCategory> 
     { 
      public GoodCategoryList() 
      { 
       string goodQuery = @"SELECT `ID`, `CategoryName` FROM `product_categoryes`;"; 

       using (MySqlConnection conn = ConnectToDatabase.OpenDatabase()) 
       { 
        if (conn != null) 
         { 
          MySqlCommand cmd = conn.CreateCommand(); 
          cmd.CommandText = productQuery; 

          MySqlDataReader rdr = cmd.ExecuteReader(); 
          while (rdr.Read()) 
          { 
           Add(new GoodCategory(rdr)); 
          } 
         } 
       } 
      } 
     } 

J'ai donc deux collections qui utilise les données de la base de données. Mais je veux utiliser ces collections dans le TreeView WPF avec HierarchicalDataTemplate. J'ai vu beaucoup de messages avec des exemples d'objets Hierarlichal, mais je ne sais pas comment faire mes objets hiérarchiquement. S'il vous plaît aider.

Répondre

0

Ajoutez une propriété de collection à la classe "parent" (je suppose que GoodCategory). Vous pourriez en faire un IList<ChildType> ou un ObservableCollection<ChildType>. (Ou, si vous ne voulez pas de code à consommer en mesure d'ajouter des marchandises à un GoodCategory, utilisez une collection en lecture seule.) Par exemple:

class GoodCategory 
{ 
    private ObservableCollection<Good> _goods = new ObservableCollection<Good>(); 

    public ObservableCollection<Good> Goods 
    { 
    get { return _goods; } 
    } 
} 

Vous devez vous assurer que cette collection est correctement synchronisé avec la propriété Good.GoodCategory - par exemple, lorsque la propriété Good.GoodCategory change un Good peut se retirer de sa collection GoodCategory.Goods existante et s'ajouter à la nouvelle collection GoodCategory's Goods. Si vous utilisez un mappeur relationnel objet plutôt que des classes et instructions SQL à la main, l'ORM doit prendre soin de cela pour vous.