Как я могу изменить свои классы, чтобы использовать их коллекции в WPF TreeView - PullRequest
0 голосов
/ 28 марта 2010

Я пытаюсь изменить мои объекты, чтобы создать иерархическую модель коллекции.Мне нужна помощь.Мои объекты Good и GoodCategory:

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"];
        }
    }

И у меня есть две Коллекции этих объектов:

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));
                            }
                        }
                }
            }
        }

Итак, у меня есть две коллекции, которые получают данные из базы данных.Но я хочу использовать те коллекции в WPF TreeView с HierarchicalDataTemplate.Я видел много постов с примерами Иерархических Объектов, но я не знаю, как сделать мои объекты иерархическими.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 28 марта 2010

Добавить свойство коллекции в родительский класс (я думаю, GoodCategory). Вы можете сделать это IList<ChildType> или ObservableCollection<ChildType>. (Или, если вы не хотите, чтобы потребительский код мог добавлять товары в категорию GoodCategory, используйте коллекцию только для чтения.) Например:

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

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

Вам необходимо убедиться, что эта коллекция правильно синхронизирована со свойством Good.GoodCategory - например, когда свойство Good.GoodCategory изменяет Good, он может удалить себя из существующей коллекции GoodCategory.Goods и добавить себя в новую. Коллекция товаров GoodCategory. Если вы используете объектно-реляционный маппер, а не классы ручной работы и операторы SQL, ORM должен позаботиться об этом за вас.

...