WPF中的剧场座位应用 - 数据绑定中的问题

时间:2010-10-07 09:54:32

标签: c# wpf ado.net layout binding

我是WPF的新手,我想在WPF-c#.net中开发剧院座位的应用程序。 我做了一些研究,但我迷失了,因为我不知道每个座位的数据(销售与否,价格,哪一行)最终应该如何绑定到SQL Express表中的字段。 我应该使用ObservableCollection来填充数据中的内容吗? 另外,我应该使用按钮网格吗?或矩形?如果我想让左前和右前的按钮倾斜一点而不是水平,我该怎么办? 如果我想为座位设置三个区域,我应该使用一个包装纸吗?左侧区域,改变空间,中间区域,改变区域和右侧区域? 如果有人能给我一些提示让我开始,我会非常高兴。 提前谢谢......

1 个答案:

答案 0 :(得分:0)

你一次提出了很多问题,如果没有为你编写程序,任何人都无法回答这些问题,但我会提供我将采取的高级方法。你将不得不花一些时间来挖掘细节。有关StackOverflow的大量信息,以及获取有关这些细节的帮助。

反正 -

数据库,3个表格

SeatStatus

  • ID,int,Primary Key
  • 姓名,字符串(例如,可用, 出售,破碎)

PricePoint

  • ID,int,Primary Key
  • 名称,字符串(例如,默认, OnSale,Premium)
  • 价格,浮动(例如10.0,8.0,12.0)

Seat

  • ID,int,Primary Key
  • SeatStatusID,int,Foreign Key - > SeatStatus表
  • PricePointID,int,外键 - > PricePoint Table
  • Row,int
  • Column,int

应用程序模型

我会使用 Entity Framework 4 并从您的TheaterSeating数据库生成您的模型。这将为您创建Seat个对象,自动包含对SeatStatusPricePoint的引用。非常光滑。

修改1

创建模型后,您将拥有一个代表您的数据的.edmx文件,并且可以轻松地读/写您的数据库。假设此文件名为TheaterSeatingModel.edmx,则自动生成的类将为您提供调用以下内容的方法:

TheaterSeatingEntities entities = new TheaterSeatingEntities();

您现在可以访问整个数据库,包括:

entities.Seats
entities.PricePoints

您可以像您自然期望的那样使用这些类,例如:

Seat seat = new Seat();
seat.Row = 10;
seat.Column = 5;
entities.Seats.Add(seat);
entities.SaveChanges();

在类中填充ObservableCollection这些席位,并将View的(XAML控件)DataContext设置为此类。

public ObservableCollection<Seat> SeatCollection {get;set;}

public ViewModelConstructor()
{
   TheaterSeatingEntities entities = new TheaterSeatingEntities();
   SeatCollection = new ObservableCollection<Seat>(entities.Seats);
}

这将使用所有Seat对象填充您的集合。

一个简单的WPF绑定到这个集合将是:

<ListBox ItemsSource={Binding SeatCollection} />

<强> UI

如果是我,我会使用其ItemsControl设置为ItemsSource席位的WPF ObservableCollection。将此ItemsControl放在Canvas内。 ItemsControl's ItemsControl.ItemTemplate控制每个Seat在您的视图中的样子。您可以将ItemTemplates Canvas.LeftCanvas.Top绑定到Seat.RowSeat.Column,将座位放在屏幕上的适当位置。您可以将模板设为按钮,矩形,座位图像,任何内容。您可以设置StylesTriggers,以便根据PricePointSeatStatus等不同地显示座位。

我认为WPF对你正在开始的项目非常有用。

祝你好运!