在商业应用中,通过图表展示信息是一种非常常见的需求。虽然Visual Studio LightSwitch没有内置的图表控件,但可以利用其扩展性,使用免费的Silverlight Toolkit中的图表控件。本文将指导如何通过自定义Silverlight控件将饼图控件嵌入到LightSwitch应用程序中,并将其与屏幕集合数据绑定。
为了实现这一功能,需要下载并安装Silverlight Toolkit以及Northwind数据库。Northwind数据库被用作外部数据源,这样可以减小源代码存档的大小,并且该数据库已经包含了许多数据。还需要对Silverlight 4或至少对XAML代码和数据绑定概念有一定的了解。此外,还需要有Visual Studio 2010 Professional或更高版本。示例应用程序将显示Northwind数据库中的产品简单列表,并根据产品的单价显示图表。这个例子将使用一个实体和一个屏幕;如果对Silverlight不陌生,构建本文描述的应用程序将不到半小时。
基本上,应用程序使用了一个自定义控件,这是LightSwitch扩展点之一。编写了这个自定义控件,嵌入了Silverlight Toolkit中的图表控件。请注意,如果没有LightSwitch,创建这样的业务应用程序将需要使用Silverlight 4(或WPF)并编写所有底层代码,如数据访问层、用户界面、数据绑定代码等。使用LightSwitch大大提升了生产力,并节省了大量的时间(从而节省了商业资金)。
在Visual Studio 2010中要做的第一件事是创建一个新的LightSwitch项目:当新项目准备好后,点击“附加到外部数据源”。在“附加数据源向导”对话框中,首先选择“数据库”选项:
然后,需要指定连接到Northwind的信息,然后可以选择表格。只需选择“产品”表格即可:
此时,Visual Studio LightSwitch会生成一个新的“产品”实体。将“小数”类型替换为“货币”业务类型,如下所示:
此时,需要一个搜索屏幕,但由于产品列表相当长,可以使用一个查询来过滤搜索结果,排除已停用的产品。要实现这一点,在设计器中点击“查询”。将新查询重命名为“AvailableProducts”并指定如下所示的“Where”条件:
现在点击“添加屏幕”,添加一个指向查询的搜索屏幕类型:
现在将实现一个自定义Silverlight控件,该控件根据产品列表绘制饼图,稍后将把这个控件嵌入到搜索屏幕中。
选择“文件”、“添加”、“新建项目”,向解决方案中添加一个新的“Silverlight类库”项目。当新项目准备好后,移除默认的代码文件(Class1.vb),然后添加一个名为“ProductsChartControl”的新项,类型为“Silverlight用户控件”。
此时,需要添加一个对名为System.Windows.Controls.Toolkit.dll的程序集的引用,该程序集位于磁盘上的Silverlight Toolkit文件夹中。现在的目标是实现一个自定义控件,该控件根据产品的名称和单价显示饼图。以下代码展示了如何实现这样的自定义控件:
<UserControl x:Class="ProductsChart.ProductsChartControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Width="420" Height="340"
d:DesignHeight="300" d:DesignWidth="400"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit">
<Grid x:Name="LayoutRoot" Background="White">
<toolkit:Chart x:Name="unitsInStockChart" Background="LightBlue" BorderBrush="Green" BorderThickness="2" Title="Situation of products in stock" Grid.Column="0">
<toolkit:Chart.Series>
<toolkit:PieSeries Name="PieSeries1" ItemsSource="{Binding Screen.AvailableProducts}" IsSelectionEnabled="False" IndependentValueBinding="{Binding ProductName}" DependentValueBinding="{Binding UnitPrice}"/>
</toolkit:Chart.Series>
</toolkit:Chart>
</Grid>
</UserControl>
基本上,toolkit中的Chart控件充当图表绘制的容器。PieSeries控件是数据绑定(ItemsSource)到屏幕集合的;IndependentValueBinding属性代表在图表的X轴上将看到的内容,而DependentValueBinding代表在Y轴上将看到的内容。此时,只需编译项目即可。
在解决方案资源管理器中,双击之前添加的搜索屏幕,使其在屏幕设计器中打开。展开设计器底部的“添加”下拉框,然后选择“新建自定义控件”:
此时,首先需要添加对类库项目的引用,然后选择之前创建的ProductsChartControl:
会注意到它被放置在屏幕控件树的底部;可以选择在属性窗口中移除控件标签。