Silverlight快速开发框架RapidSL新特性

对sl传统的开发方式进行了集成和封装,核心模块基于MVVM,通用的CRUD ViewModel,只需要定制自己的Xaml View,提供了非常便捷的快速开发方式; 采用了Silverlight 5.0 + EF4.1 Code First + Ria Service SP2 + Ria Service Toolkit + Silverlight Control Toolkit + Light MVVM;已经实现了轻量级的权限管理,上传模块,内容管理,作为实例,涉及到了sl开发的各种技术难点和技巧,既可以作为学习,也可以作为项目开发的原型

点击预览 | 源代码

支持动态加载.xap,面向插件开发

RapidSL.SL.App.Portal提供主框架的UI逻辑,只需要开发自己的App,如RapidSL.SL.App.Main

然后配置菜单:

 
 
 
 
  1.                                 
  2.                                 
  3.                            

XapHost控件提供动态下载.xap及加载

 
 
 
 
  1. public XapHost(string xapUri, string viewName = null)
  2.          {
  3.              InitializeComponent();
  4.              this.FileName = xapUri;
  5.              var xapLoad = new XapLoader(xapUri);
  6.              xapLoad.DownloadProgressChanged += (s, e) =>
  7.              {
  8.                  this.TotalSize = (e.TotalBytesToReceive * 1d / 1024 / 1024).ToString("0.00");
  9.                  this.Percentage = e.ProgressPercentage;
  10.              };
  11.              xapLoad.LoadCompleted += (s, e) =>
  12.              {
  13.                  this.Content = e.Element;
  14.              };
  15.              xapLoad.LoadControl(null, viewName);
  16.          }

对Resource的支持

找到所有标识有 StaticResourceAttribute的类,然后创建相关实例,并注入到Application.Resources,相当于在 App.xaml里手写资源

实现了资源管理器对资源进行注入管理

 
 
 
 
  1. View Code 
  2.  public class ViewModelManager
  3.      {
  4.          private static Application app = Application.Current; 
  5.          public static void InjectViewModelsToResources()
  6.          {
  7.              foreach (AssemblyPart ap in Deployment.Current.Parts)
  8.              {
  9.                  var sri = Application.GetResourceStream(new Uri(ap.Source, UriKind.Relative));
  10.                  var assembly = new AssemblyPart().Load(sri.Stream);
  11.  
  12.                  InjectViewModelsToResources(assembly);             
  13.              } 
  14.          } 
  15.          public static void InjectViewModelsToResources(Assembly assembly)
  16.          {
  17.              foreach (Type type in assembly.GetTypes())
  18.              {
  19.                  var attributes = type.GetCustomAttributes(false);
  20.  
  21.                  foreach (var attribute in attributes)
  22.                  {
  23.                      if (attribute is StaticResourceAttribute)
  24.                      {
  25.                          var resourceKey = ((StaticResourceAttribute)attribute).Key;
  26.                          if (string.IsNullOrEmpty(resourceKey))
  27.                              resourceKey = type.Name; 
  28.                          var obj = Activator.CreateInstance(type);
  29.                          if (!app.Resources.Contains(resourceKey))
  30.                              app.Resources.Add(resourceKey, obj);
  31.                      }
  32.                  }
  33.              }
  34.          }
  35.          public static T GetViewModelFromResources()
  36.          {
  37.              var key = typeof(T).Name;
  38.              if (app.Resources.Contains(key))
  39.                  return (T)app.Resources[key];
  40.              else
  41.                  return default(T);
  42.          }
  43.      }

键盘Enter键提交表单

使用AttatchProperty实现传统Html表单的键盘Enter提交

 
 
 
 

具体绑定按钮和键盘事件

 
 
 
 
  1. #region SubmitButton AttachProperty
  2.          public static object GetSubmitButton(DependencyObject obj)
  3.          {
  4.              return (object)obj.GetValue(SubmitButtonProperty);
  5.          }
  6.  
  7.          public static void SetSubmitButton(DependencyObject obj, object value)
  8.          {
  9.              obj.SetValue(SubmitButtonProperty, value);
  10.          }
  11.  
  12.          // Using a DependencyProperty as the backing store for SubmitButton.  This enables animation, styling, binding, etc...
  13.          public static readonly DependencyProperty SubmitButtonProperty =
  14.              DependencyProperty.RegisterAttached("SubmitButton", typeof(object), typeof(AttachProperties), new PropertyMetadata(SubmitButtonChanged));
  15.  
  16.          private static void SubmitButtonChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  17.          {
  18.              var button = (ButtonBase)e.NewValue;
  19.              var form = d as UIElement;
  20.              form.KeyDown += (s, se) =>
  21.              {
  22.                  if (se.Key == Key.Enter)
  23.                  {
  24.                      button.Focus();
  25.                      if (button.Command != null)
  26.                         button.Dispatcher.BeginInvoke(()=>  button.Command.Execute(null));
  27.                  }
  28.              };
  29.          }
  30.          #endregion

分享文章:Silverlight快速开发框架RapidSL新特性
网页网址:http://www.csdahua.cn/qtweb/news12/340612.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网