silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight/MVVM大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

百度百科上这样解释Silverlight:          微软Silverlight是一个跨浏览器、跨客户平台的技术,能够设计、开发和发布有多媒体体验与富交互(RIA,Rich Interface Application)的网络交互程序。           根据公司的项目需要及公司的安排,最近我也在学习Silverlight相关内容,昨天还参加了公司的技术培训,在培训过程中给我们引入了MVV

百度百科上这样解释Silverlight:

         微软Silverlight是一个跨浏览器、跨客户平台的技术,能够设计、开发和发布有多媒体体验与富交互(RIA,Rich Interface Application)的网络交互程序。

 

        根据公司的项目需要及公司的安排,最近我也在学习Silverlight相关内容,昨天还参加了公司的技术培训,在培训过程中给我们引入了MVVM的概念,不难猜想出MVVM是Model-View-viewmodel的简写.MVVM框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性揉合进去,以应对客户日益复杂的需求变化。

 

         MVVM模式跟经典的MVP(Model-View-Presenter)模式很相似,除了你需要一个为View量身定制的model,这个model就是viewmodel。viewmodel包含所有由UI特定的接口和属性,并由一个 viewmodel 的视图的绑定属性,并可获得二者之间的松散耦合,所以需要在viewmodel 直接更新视图中编写相应代码。数据绑定系统还支持提供了标准化的方式传输到视图的验证错误的输入的验证。

     

        对于传统的web开发而言,如果我们想改变页面控件中的内容,我们会在后台代码中【或其他方式】找到该控件,然后对控件重新赋值。而MVVM模式的项目的不同之处在于,我们只需要操作VM 便可以更改界面上的信息而无需对界面控件进行操作;简单来讲就是,当我们在View页面绑定了一个VM实体模型,首次加载时@R_489_6380@信息呈现在界面上,如果我们想对页面上的信息进行分页,那么我们只需要对vm进行操作,而不需要对界面上的控件再次进行绑定操作;微软是如何做到这一点的呢,在这里,运用了事件。看完下面的例子便可以从中得到答案。

 

新建Silverlight的应用程序,如下图所示:

Silverlight/MVVM

DataGridResultItem.cs文件代码:

在这里,需要解释一下代码第一行的继承接口INotifyPropertyChanged;

INotifyPropertyChanged中定义了了一个事件PropertyChanged,这个事件在属性值被更改时触发,所以在这里我们要写该事件的实现;

DataGridResultCollection.cs中的代码

@H_529_46@mainPage.xaml中的代码

@H_301_56@<UserControl xmlns:toolkit="http://scheR_152_11845@as.microsoft.com/winfx/2006/xaml/presentation/toolkit" xmlns:sdk="http://scheR_152_11845@as.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="SilverlightApplication1.MainPage" xmlns="http://scheR_152_11845@as.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://scheR_152_11845@as.microsoft.com/winfx/2006/xaml" xmlns:d="http://scheR_152_11845@as.microsoft.com/expression/blend/2008" xmlns:mc="http://scheR_152_11845@as.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Height="480" Width="640"> <toolkit:DockPanel LastChildFill="True"> <StackPanel toolkit:DockPanel.Dock="Top" Orientation="Horizontal"> <Button Name="BtnTest" Content="随机添加" ToolTipservice.ToolTip="添加一行,内容随机。" Click="BtnAdd_Click" /> <Button Name="BtnRemoveItem" Content="删除信息" ToolTipservice.ToolTip="删除不及格的行。" Click="BtnRemoveItem_Click" /> <Button Name="BtnShow" Content="{Binding Name,Relativesource={Relativesource Self}}" ToolTipservice.ToolTip="显示当前先选中行的部分信息。" Click="BtnShow_Click" /> <Button Name="BtnNoSELEct" Content="取消选中" ToolTipservice.ToolTip="取消当前选中的行。" Click="BtnNoSELEct_Click" /> <Button Name="BtncheckAll" Content="全部及格" ToolTipservice.ToolTip="勾选所有行的"及格"列。" Click="Btncheckall_Click" /> <Button Name="BtnChangePage" Content="改变页数" ToolTipservice.ToolTip="跳转到第1页。" Click="BtnChangePage_Click" /> <Button Name="BtnEditItem" Content="变更内容" ToolTipservice.ToolTip="改变当前选中行的内容。" Click="BtnEditItem_Click" /> <sdk:Label Content="编辑内容" ToolTipservice.ToolTip="编辑String、int等简单列,直接单击两次列表中的单元格,编辑完成后对应的viewmodel自动改变。如果要编辑Guid等需要验证输入格式的复杂内容,可以虑使用转换器或做个编辑窗口。" /> </StackPanel> <sdk:DataPager Name="DataPager1" PageSize="17" toolkit:DockPanel.Dock="Bottom" source="{Binding}" /> <sdk:DataGrid Name="DataGrid1" AutoGeneratecolumns="false" toolkit:DockPanel.Dock="Top" Itemssource="{Binding}" > <sdk:DataGrid.columns> <sdk:DataGridTextcolumn Binding="{Binding ID}" Header="编号" /> <sdk:DataGridTextcolumn Binding="{Binding NamE}" Header="姓名" /> <sdk:DataGridTextcolumn Binding="{Binding AgE}" Header="年龄" /> <sdk:DataGridcheckBoxcolumn Binding="{Binding IsExamPass}" Header="及格" /> </sdk:DataGrid.columns> </sdk:DataGrid> </toolkit:DockPanel> </UserControl>

 @H_529_46@mainPage.xaml.cs中的代码

@H_301_56@ public partial class MainPage : UserControl { private DataGridResultCollection _dataGridResult; //View:DataGrid1的viewmodel private PagedCollectionView _pagedResult; //View:DataPager1的viewmodel public MainPage() { InitializeComponent(); _dataGridResult = new DataGridResultCollection(); _pagedResult = new PagedCollectionView(_dataGridResult); //绑定viewmodel到View。 DataPager1.DataContext = _pagedResult; DataGrid1.DataContext = _pagedResult; //有些属性使用Xaml不易绑定,就用代码绑定 Binding binding = new Binding(); binding.source = _dataGridResult; binding.Path = new PropertyPath("SELEctedItem"); binding.Mode = BindingMode.TwoWay; DataGrid1.SetBinding(DataGrid.SELEctedItemProperty,binding); //从绑定完这一刻开始,代码中就不应该再使用DataPager1和DataGrid1这样的View名称,要始终记得: //改变viewmodel就是改变View;如果要操作View,通过操作viewmodel来达到目的。 } //在View中添加一行,就是在viewmodel中添加一个新项。 private void BtnAdd_Click(object sender,RoutedEventArgs E) { Random random = new Random(); _dataGridResult.Add(new DataGridResultItem() { ID = Guid.NewGuid(),Name = random.Next().ToString(),Age = random.Next(100),IsExamPass = random.Next(2) == 0 ? false : true }); } //获取View中被选中的SELEctedItem,就是访问对应viewmodel的相应属性 private void BtnShow_Click(object sender,RoutedEventArgs E) { DataGridResultItem SELEctedItem = _dataGridResult.SELEctedItem; if (SELEctedItem == null) { messageBox.Show("未选中任何项"); } else { messageBox.Show("选中项的编号为:[" + SELEctedItem.ID.ToString() + "],试结果是:" + SELEctedItem.IsExamPass.ToString()); } } //取消View中选中的行,就是把对应的viewmodel中的相应属性设成null private void BtnNoSELEct_Click(object sender,RoutedEventArgs E) { _dataGridResult.SELEctedItem = null; } //勾选View中的复选框,就是把复选框对应的viewmodel属性设为True private void Btncheckall_Click(object sender,RoutedEventArgs E) { foreach (DataGridResultItem item in _dataGridResult) { item.IsExamPass = true; } } //改变DataPager这个View的页数,就是执行_pagedResult这个viewmodel的MoveToPage方法。 private void BtnChangePage_Click(object sender,RoutedEventArgs E) { _pagedResult.MoveToPage(0); } //删除DataGrid里的行,就是删除它对应viewmodel里的Item private void BtnRemoveItem_Click(object sender,RoutedEventArgs E) { Array.ForEach(_dataGridResult.ToArray(),item => { if (item.IsExamPass == falsE) { _dataGridResult.Remove(item); } }); } //改变当前选中行的内容,就是改变对应viewmodel的属性 private void BtnEditItem_Click(object sender,RoutedEventArgs E) { if (_dataGridResult.SELEctedItem == null) { messageBox.Show("未选中任何项"); return; } Random random = new Random(); _dataGridResult.SELEctedItem.ID = Guid.NewGuid(); _dataGridResult.SELEctedItem.IsExamPass = random.Next(2) == 0 ? false : true; _dataGridResult.SELEctedItem.Name = random.Next().ToString(); _dataGridResult.SELEctedItem.Age = random.Next(100); } }

大佬总结

以上是大佬教程为你收集整理的Silverlight/MVVM全部内容,希望文章能够帮你解决Silverlight/MVVM所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。