Monotouch:TableView父数据类,节和项设置

时间:2014-05-15 01:28:19

标签: c# uitableview xamarin.ios

我是C#和Monotouch / iOS编程的新手。

我正在创建一个表视图的数据源,并正在为它设置对象数据。这是我需要实现的: 餐厅菜单 - >菜单部分 - >部分项目。餐厅有多个菜单的另一个要求。我按如下方式设计了这些类:

public class Menu
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<MenuSection> Sections { get; set; }
    public List<SectionItem> Items { get; set; }
}

public class MenuSection
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class SectionItem
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
} 

我是在Menu类或MenuSection类中声明Items(SectionItems)吗?在C#中这种层次结构的正确实现是什么?谢谢!

更新

@Jason,你提出的解决方案我遇到了一个实施问题。如何将项目与菜单相关联?我必须通过层次结构Item-&gt; Section-&gt; Menu。根据您提出的结构,我能否将项目添加到特定菜单中?

例如:

List<Menu> menuList = new List<Menu> ();
Menu menu;

menu = new Menu (){ Id = 1, Name = "Lunch Menu" };
menu.Sections.Add(new MenuSection(){ Id = 1, Name = "Specials"});
menuList.Add(menu);

menu = new Menu (){ Id = 2, Name = "Dinner Menu" };
menu.Sections.Add(new MenuSection(){ Id = 1, Name = "Salads"});
menuList.Add(menu);

如何在不知道哪个菜单以及我将其添加到哪个部分的情况下添加项目?您能否提供一个将项目添加到上述菜单中的示例?想到的一个解决方案是通过将Menu.Id和Menu.Name添加到Section来对菜单和节进行非规范化,然后我只需要处理单个层次结构;但是,这将避免这个问题。肯定有更好的办法。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

项目应该是Section的孩子。

public class Menu
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<MenuSection> Sections { get; set; }

}

public class Section
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<SectionItem> Items { get; set; }
}

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
} 

更新

访问/添加菜单项(有多种方式)

// adding by index
menuList[0].Sections[0].Items.Add(new Item() { .. init .. });

// keep a reference to a section
Section dinner = new Section() { .. init .. };
dinner.Items.Add(new Item() { .. init ..});
dinner.Items.Add(new Item() { .. init ..});
menu.Sections.Add(dinner);