65.9K
CodeProject 正在变化。 阅读更多。
Home

一个高级Visual Studio LightSwitch应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (45投票s)

2011年12月8日

Ms-PL

4分钟阅读

viewsIcon

130478

一个高级Visual Studio LightSwitch应用程序

是的,这是一个 LightSwitch 应用程序

LightSwitch 是一个强大的应用程序创建器。但是,有时您可能需要完全控制用户界面、程序流程和功能。我创建了一个示例 LightSwitch 应用程序,它具有以下高级功能

  • 用户界面完全由自定义 Silverlight 控件组成
  • 使用了 Silverlight 主题
  • 实现了自定义搜索
  • 实现了自定义分页
  • 文件管理
    • 文件可以被上传并附加到服务台工单评论
    • 文件可以被检索显示
    • 服务台工单删除时,任何相关的文件也会被删除

不过,我将首先回答 LightSwitch Star Contest 所要求的几个问题

您的应用程序/扩展程序做什么?它解决了什么业务问题?

此应用程序允许公司创建和跟踪服务台工单。

这个应用程序有多少屏幕和实体?

两个屏幕和两个实体。

如果您没有 LightSwitch,这个应用程序还会被构建出来吗?如果会,用什么构建?

我开始在普通的 Silverlight 中兼职使用 MVVM 来构建此应用程序。由于项目花费的时间超过了我预期的,我不得不放弃了。

使用 LightSwitch 构建此应用程序实际花了多长时间?

大约 4 小时。纯粹的 LightSwitch 部分只花了大约一个小时。

此应用程序是否使用任何 LightSwitch 扩展?如果使用,是哪些?您自己编写过这些扩展吗?如果编写过,是否公开发布?在哪里?

此项目使用了 最小 Shell 扩展

LightSwitch 如何让您的开发人员生活更好?与您考虑过的其他选项相比,构建速度是否更快?

大大加快速度!

您可以在 LightSwitch 中做任何您能在 Silverlight 中做的事情

LightSwitch 创建 Silverlight 应用程序。它还允许您使用自己的 Silverlight 控件。

LightSwitch 使用 MVVM,因此您必须使用绑定来提供数据并与您的 Silverlight 控件进行通信。

上图显示了 Silverlight datagrid 中的绑定如何绑定到放置在其上的 LightSwitch 屏幕

您可以在此处阅读更多关于在 LightSwitch 中使用 Silverlight 自定义控件的信息: http://lightswitchhelpwebsite.com/Blog/tabid/61/tagid/2/Custom-Controls.aspx

Silverlight 主题

应用程序的外观主要通过使用普通的 Silverlight 主题来实现。在此示例中,我使用了 JetPack 主题

主题Silverlight 项目的 Assets 目录中的 .xaml 文件以及两个额外的背景图像组成。

如果我们注释掉那段代码,我们会看到 UI 仅仅由普通的 Silverlight 控件组成。

自定义搜索

自定义搜索由一个 TextBox(绑定到 SearchText 属性,该属性绑定到 HelpDeskTickets 集合中的查询参数)和一个用于触发搜索的搜索按钮组成。

HelpDeskTickets 集合上的筛选器定义了搜索。

当按下搜索按钮时,将运行以下代码

        private void btnSearch_Click(object sender, RoutedEventArgs e)
        {
            // Get a reference to the LightSwitch DataContext 
            var objDataContext = (IContentItem)this.DataContext;

            // Get a reference to the LightSwitch Screen
            var Screen =
                (Microsoft.LightSwitch.Client.IScreenObject)objDataContext.Screen;

            // Call the Method on the LightSwitch screen
            Screen.Details.Dispatcher.BeginInvoke(() =>
            {
                Screen.Details.Methods["SearchTickets"]
                    .CreateInvocation(null).Execute();
            });
        } 

这会调用 SearchTickets 方法,该方法只是刷新 HelpDeskTickets 集合,从而执行并应用搜索筛选器。

自定义分页

要实现自定义分页,Silverlight 控件包含会触发 NextRecordPreviousRecord 方法的按钮。

分页代码非常简单

         partial void PreviousRecord_Execute()
        {
            if (HelpDeskTickets.Details.PageNumber > 1)
            {
                HelpDeskTickets.Details.PageNumber--;
            }
        }

        partial void NextRecord_Execute()
        {
            if (HelpDeskTickets.Details.PageNumber < HelpDeskTickets.Details.PageCount)
            {
                HelpDeskTickets.Details.PageNumber++;
            }
        }

文件管理

文件管理是使用 ASP.NET 页面WCF RIA Services 的组合来实现的。

文件管理代码允许您上传文件并将其附加到评论,通过单击datagrid中的文件来查看文件,并在删除相关评论时删除文件。

Visual Studio 解决方案资源管理器中,我们可以切换到文件视图...

然后选择显示所有文件以显示 ServerGenerated 项目。

我们放置一个 FileUpload.ashx 文件处理程序来上传文件,并使用一个 Download.aspx 文件来显示上传的文件。

现在我们需要将文件添加到构建文件中,以便 LightSwitch 将它们包含在构建中。

我们右键单击 LightSwitch 项目并选择卸载项目

我们编辑 .lsproj 文件。

我们在文件中添加条目(代码隐藏将自动编译和部署,因此我们只需要添加 .aspx.ashx 文件)。

然后我们重新加载项目

以下代码由 LightSwitch 使用来调用 Download.aspx 文件以下载文件

        public void DownloadFile(string strFileName)
        {
            Dispatchers.Main.Invoke(() =>
            {
                HtmlPage.Window.Navigate(new Uri(string.Format("{0}",
                    String.Format(@"DownloadFile.aspx?FileName={0}",
                    strFileName)), UriKind.Relative), "_new");
            });
        } 

当文件被删除时,自定义 WCF RIA Service 中的以下方法会删除该文件

        public void DeleteFile(FileRecord objFileRecord)
        {
            // Look for the file
            var objFile = (from LocalFiles in _LocalFiles
                           where LocalFiles.FileName == objFileRecord.FileName
                           select LocalFiles).FirstOrDefault();

            if (objFile != null)
            {
                string strFileDirectory = GetFileDirectory();
                File.Delete(Path.Combine(strFileDirectory, objFile.FileName));
            }
        } 

自定义 Shell

Microsoft 有一个 演练:创建 Shell 扩展,它将向您展示如何创建一个简单的Shell 扩展。我使用了它来创建 最小 Shell 扩展

Shell 扩展的目的是允许我完全控制应用程序的外观并移除 LightSwitch 菜单。其功能包括

它允许在Shell的右上方显示一个 200x50 的 Logo。

默认选项卡无法关闭。

我在这里有一个关于Shell 扩展的完整演练

LightSwitch Extras 主题

LSHelpDesk/image_thumb1.png

当我们使用 LightSwitch Extras JetPack 主题时,它会正确地格式化选项卡和背景。

 

LightSwitch 已做好准备

我希望这个项目能够证明 LightSwitch 能够处理您 90% 以上的代码和时间节省的项目。

有大量的教程、技巧、博客和论坛可以在

历史

  • 2011 年 12 月 14 日:初始版本
© . All rights reserved.