




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
构建WindowsPhone8
应用程序大纲WindowsPhone8.0开发工具应用程序生命周期管理页面导航ApplicationBar动态更改屏幕方向WP8常用控件数据绑定2023/1/17Microsoftconfidential2WindowsPhone8.0开发工具2023/1/17Microsoftconfidential3如果你开发WindowsPhoneOS7.1的应用程序,必需安装Zune来连接到WindowsPC也可以进行同步媒体执行手机更新WindowsPhone8设备仅需要一个USB就可以进行连接连接WindowsPhone手机2023/1/17Microsoftconfidential4注册开发手机你可以将手机注册为开发设备,将自己的应用程序进行部署这是一个特定的手机个人开发者账号可以注册三台设备学生开发者账号可以注册一台设备2023/1/17Microsoftconfidential5部署到手机当你运行程序时,VisualStudio为你应用程序允许选择目标设备两个平台上的开发环境是完全相同的对于每一个应用程序可以使用同一种方法进行调试2023/1/17Microsoftconfidential6一旦你将应用程序部署到手机设备上,该应用程序将会存储在设备中供以后使用手机中最多部署10个自己的应用程序也可以将编译好的应用程序发送给其他开发者,在他们的设备上进行测试手机中应用程序2023/1/17Microsoftconfidential7VisualStudio提供了一个特别的调试体验这种体验运用到了WindowsPhone中可以为WindowsPhone和WindowsPC应用程序进行调试操作断点Breakpoints单步调试查看并修改变量VisualStudio调试2023/1/17Microsoftconfidential8选择Device作为开发目标。你可以不使用模拟器来测试本地生成的代码使用Ctrl+F5(不使用调试按钮来启动)在设备上部署运行应用程序或者使用Alt+F1
(启动WindowsPhone性能分析)作为一个本地优化镜像来测试应用程序.测试应用程序的性能和响应能力作为一个本地优化镜像来测试应用程序2023/1/17Microsoftconfidential9在WindowsPC中,WindowsPhone模拟器作为一个Hyper-V虚拟机进行运行作为一个“真正”的手机,它包含相同的软件,是基于WindowsPC构建的模拟器还提供了WindowsPhoneSDK可以使用模拟器来测试位置和方向可以使用VisualStudio提供的模拟器仪表盘来管理模拟器状态手机的锁与解锁控制性能和可用性的网络WindowsPhone模拟器2023/1/17Microsoftconfidential10模拟器是一个靠谱的方案来模拟应用程序在真实设备上运行的情况WindowsPC的处理器可能比手机更给力模拟器仅用做功能性测试若担心性能上任何问题,可以使用真实设备运行应用程序无论在设备和模拟器上,可以使用分析工具来检查应用程序的活动模拟器性能112023/1/17MicrosoftconfidentialVisualStudio允许选择目标设备运行程序启动第一次部署的模拟器它将会一直运行,知道手动停止掉,并且在此期间维护本地存储提供了多种分辨率的模拟器,增加了WVGA512MB模拟器来效仿低内存的WindowsPhone7.5设备部署到模拟器122023/1/17Microsoftconfidential你能够使用PC的鼠标控制模拟器如果你有一个多点触控显示器,你可以使用多点触控在显示器上进行缩放操作模拟器会模拟触摸键盘,你讲通过点击上面的按键来操作使用PgUp/PgDn按键可以在模拟器软键盘和PC键盘输入之间切换模拟器输入132023/1/17Microsoftconfidential使用模拟器右侧的命令条访问工具的其他设置允许将模拟器旋转到不同的方向使用该功能测试软件对方向变化的响应模拟器方向142023/1/17Microsoftconfidential模拟相机相机模拟器只能捕获简单的图像并返回你可以使用它来验证应用程序调用拍照任务并能够立即获取到结果152023/1/17MicrosoftconfidentialDemo1:PhotoSnap2023/1/17MicrosoftconfidentialWindowsPhone应用程序能够使用模拟器生成定位数据为了实现模拟定位我们需要打开位于模拟器右侧的附加工具面板模拟定位17附加工具2023/1/17Microsoftconfidential这是附加工具中的定位栏你能够点击任何位置来移动模拟器的当前坐标Youcanalsoplacepushpinstodescribearoute,andthen“replay”thatroute你能够设置多个标记来描述一条路线,然后替换该路线18附加工具2023/1/17MicrosoftconfidentialDemo2:Location2023/1/17Microsoftconfidential在模拟器中显示锁定屏幕是一种很好的方式测试当你的应用不可用时发生的状态变化使用键盘:在你的电脑上按下F12键两次使用模拟仪表板:在VisualStudio工具菜单,打开模拟仪表板在模拟器中锁定屏幕2023/1/17Microsoftconfidential20模拟面板中包含网络模拟让模拟器在不同的模拟网络环境下测试你的应用程序模拟网络2023/1/17Microsoftconfidential21模拟器的截屏功能非常有用截屏功能的截图能够用于文档和在Marketplace中促销应用模拟器附加工具面板提供了截屏栏截屏222023/1/17Microsoftconfidential在WindowsPhone8中全新支持!同时按下电源和Windows按键通过社交网络可以简单地分享屏幕截图在真实设备上截屏2023/1/17Microsoftconfidential23商店覆盖的消费者:超过180个国家
120个以上新增8.029个国家WindowsPhone7.0180多个国家WindowsPhone863个国家WindowsPhone7.5180+123312023/1/17Microsoftconfidential24开发者:超过180个国家
140多个新增7.5&8.038国家WindowsPhone7.x180多个国家WindowsPhone8.02023/1/17Microsoftconfidential25语言:50种语言
26种新增WindowsPhone7.524LanguagesChineseSimplifiedChineseTraditionalCzechDanishDutchEnglish(US)FinnishFrenchGermanGreekHungarianIndonesianItalianJapaneseKoreanLatvianLithuanianMalayPolishPortuguese(Portugal)Portuguese(Brazil)RussianSpanish(Spain)SwedishWindowsPhone850LanguagesAlbanianArabicAzerbaijani(Latin)BelarusianBulgarianCatalanCroatianEnglish(UK)EstonianFilipinoHebrewHindiKazakhMacedonianNorwegian(Bokmål)PersianRomanianSerbian(Latin)SlovakSlovenianSpanish(Mexico)ThaiTurkishUkrainianUzbek(Latin)Vietnamese8.02023/1/17Microsoftconfidential26WindowsPhone应用生命周期2023/1/17MicrosoftconfidentialTombstonedWindowsPhone应用程序在不同的状态间过渡启动(Launching)和关闭(Closing)激活(Activating)和失效(Deactivating)休眠(Dormant)和墓碑(Tomstoned)
WindowsPhone应用生命周期2023/1/17MicrosoftconfidentialNotrunningRunningLaunchingClosingDeactivatingActivatingDormant28应用程序的生命周期事件WindowsPhone应用程序环境会通过一些事件通知上述状态,在项目模板里的App.xaml里订阅了事件,并在App.xaml.cs处理了,初使化情况下处理逻辑是空的。//Codetoexecutewhentheapplicationislaunching(eg,fromStart)//Thiscodewillnotexecutewhentheapplicationisreactivatedprivate
voidApplication_Launching(objectsender,LaunchingEventArgse){}2023/1/17Microsoftconfidential29Demo3:LaunchingandClosing2023/1/17Microsoftconfidential启动和关闭:Launching和Closing
当程序启动时,Applcation_Launching会被调用程序结束时,Application_Closing会被调用调试器在程序停止后还会继续运行,所以需要手动结束2023/1/17MicrosoftconfidentialNotrunningRunningApplication_
LaunchingApplication_
Closing31程序的Deactivation和Reactivation出于省电的考虑,任何时间只有一个程序运行在前台用户可以deactivate程序也可以reactivate它们程序需要处理Activated和Deactivated事件2023/1/17Microsoftconfidential32Demo4:DeactivatingandActivating2023/1/17Microsoftconfidential程序的休眠(Dormant)用户可以随时休眠应用程序,然后运行其他程序Application_Deactivated函数被调用
电话和锁屏程序都会触发休眠用户也可以恢复休眠的程序。2023/1/17MicrosoftconfidentialTombstonedRunningDeactivatingActivatingDormant34处理休眠当程序被休眠时必须尽可能地保存数据因为程序可能会关闭,如果用户不再通过长按Back回到那个程序,Application_Deactivated就相当于Application_Closing了。你的程序有5秒钟的机会清理现场(保存数据),之后程序会被从内存中清除掉。当程序长按Back恢复时,它会自动恢复到Deactivated时的那个页面,这是操作系统帮我们做的,但是,页面的内容并不会自动保存。
2023/1/17Microsoftconfidential35从休眠中激活ActiveDormant2023/1/17Microsoftconfidential36从休眠到墓碑一个程序会和其他程序一起在内存里休眠,如果操作系统的内存不够用了会释放最先休眠的程序的缓存状态,这个过程叫做“墓碑化”。
页面导航历史和缓存状态都被墓碑了的程序维护着。当一个休眠了的程序恢复时,缓存状态会重新加载,程序会万利到它离开之前的那个页面。当一个墓碑了的程序恢复时,它会重启离开之前的页面,但是所有的程序状态会丢失,你需要重新加载。一个程序可以决定从哪个状态激活。
2023/1/17Microsoftconfidential37TombstonedRunningDeactivatingActivatingDormant从墓碑状态重新激活ActiveDormantTombstoned2023/1/17Microsoftconfidential38从休眠还是墓碑恢复的?可以在恢复前做一个判断private
voidApplication_Activated(objectsender,ActivatedEventArgse){
if(e.IsApplicationInstancePreserved){
//Dormant-objectsinmemoryintact}
else{
//Tombstoned-needtoreload}}2023/1/17Microsoftconfidential39调试墓碑状态当休眠的时候,可以在VisualStudio里设置强制程序墓碑化(从内存中移除)。你应该把这个做为测试引擎的一部分。你也可以用模拟器操作锁屏,也可以让程序进入休眠。
2023/1/17Microsoftconfidential40Demo5:DormantvsTombstoned2023/1/17Microsoftconfidential状态和墓碑当程序从休眠恢复时,程序会准确地恢复到离开时的页面,所有的对象和它们的状态都在内存里,你可能需要写一些逻辑来重置依赖于时间或网络的调用代码。当程序从墓碑恢复时,程序只会恢复到离开时的页面,但所有对象和它们的状态都丢失了,所以需要重新加载控件的数据,这就是为什么需要保存状态,程序从内存中移除了系统也维护着状态。当程序的一个新的实例启动时,状态是空的。如果一个先前的程序挂起了,那么那个程序存储的状态字典会丢失。2023/1/17Microsoftconfidential42状态字典休眠程序的状态信息存在一个状态字典里,如上述代码。可以在Application_Deactivated函数里存储,然后在页面激活时读取。所以Application_Deactivated有两件事情要做,保存数据以防程序不能重新激活,保存状态数据以保证程序恢复到正确的状态。
PhoneApplicationService.Current.State["Url"]="";2023/1/17Microsoftconfidential43Deactivation保存数据当用户导航离开您的应用的某个页面时,将会调用OnNavigatedFrom(NavigationEventArgs)
方法。protected
override
void
OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs
e)
{
base.OnNavigatedFrom(e);
if
(e.NavigationMode
!=
System.Windows.Navigation.NavigationMode.Back
&&
e.NavigationMode
!=
System.Windows.Navigation.NavigationMode.Forward)
{
//
If
we
are
exiting
the
page
because
we've
navigated
backorforward,
//
no
needto
save
transient
data,
because
this
page
iscomplete.
//
Otherwise,
we're
being
deactivated,
so
save
transient
data
//
in
case
we
get
tombstoned
this.State["pleteEntry"]
=
this.logTextBox.Text;
}}2023/1/17Microsoftconfidential44Reactivation恢复数据用户导航到页面时,即会调用OnNavigatedTo(NavigationEventArgs)
方法。protected
override
void
OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs
e)
{base.OnNavigatedTo(e);
//
If
the
State
dictionary
contains
our
transient
data,
//
we're
being
reactivated
so
restore
the
transient
data
if
(this.State.ContainsKey("pleteEntry"))
{
this.logTextBox.Text
=
(string)this.State["pleteEntry"];
}}2023/1/17Microsoftconfidential45页面导航2023/1/17MicrosoftconfidentialFrame是最外层的窗器,是PhoneApplicationFrame类,包括Page和系统元素(像系统托盘,ApplicationBar)。Page填充整个Frame的内容区域,从PhoneApplicationPage类派生,包括一个Title,可选择是否加入ApplicationBar。Frame和Page2023/1/17Microsoftconfidential47页面导航基于页面的导航模式,类似Web页面导航,每个页面有一个URI,每个页面本质上是无状态的。
private
voidHyperlinkButton_Click_1(
objectsender,RoutedEventArgse){NavigationService.Navigate(
new
Uri("/SecondPage.xaml",UriKind.Relative));}2023/1/17Microsoftconfidential48导航--后退程序提供了导航的接口
物理后退键也会引起后退到前页,而不用写任何代码
private
voidButton_Click_1(
objectsender,RoutedEventArgse){NavigationService.GoBack();}2023/1/17Microsoftconfidential49重写后退按键的事件也许需要在用户按了后退键时做一些程序上的判断,比如弹出一个提示窗问用户是否真的想后退,因为可能是误操作。<phone:PhoneApplicationPagex:Class="PhoneApp1.MainPage"…shell:SystemTray.IsVisible="True"BackKeyPress="PhoneApplicationPage_BackKeyPress">Incode:privatevoidPhoneApplicationPage_BackKeyPress(objectsender,
ponentModel.CancelEventArgse){e.Cancel=true;//Tellsystemwe'vehandledit//Hidethepopup......}2023/1/17Microsoftconfidential50在页面间传数据在页面间传字符串Ondestinationpage目标页面接收
private
voidpassParam_Click(objectsender,RoutedEventArgse)
{
NavigationService.Navigate(new
Uri("/SecondPage.xaml?msg="+textBox1.Text,UriKind.Relative));
}
protectedoverridevoidOnNavigatedTo(System.Windows.Navigation.NavigationEventArgse){
base.OnNavigatedTo(e);
string
querystringvalue="";
if(NavigationContext.QueryString.TryGetValue("msg",outquerystringvalue))textBlock1.Text=querystringvalue;}2023/1/17Microsoftconfidential51在页面间传递对象一种方式是将对象存在App类里(也就是全局对象)另一种还是用导航函数传:
//NavigatetothenewpageNavigationService.Navigate(new
Uri("/DetailsPage.xaml?selectedItem="+(MainLongListSelector.SelectedItemas
ItemViewModel).ID,UriKind.Relative));2023/1/17Microsoftconfidential52处理非线性导航要细心设计程序的导航策略如果从“第三页”跳转到“首页”,然后再点击物理后退按钮,会发生什么?用户想退出程序,可是程序却回到了“第三页”其实可以用NavigationService.RemoveBackEntry()来清除后退栈。532023/1/17Microsoftconfidential53NavigationService.RemoveBackEntry()当“第三页”跳转到“首页”,在导航的参数中加一个传递参数:
在“首页”的OnNavigatedTo事件中,检测是否有这个传递参数,如果有的话,移除"第三页"和"第二页"的导航栈位置。54
NavigationService.Navigate(new
Uri("/MainPage.xaml?homeFromThird=true",UriKind.Relative));
protected
override
voidOnNavigatedTo(NavigationEventArgse)
{
if(e.NavigationMode==System.Windows.Navigation.NavigationMode.New
&&NavigationContext.QueryString.ContainsKey("homeFromThird"))
{
NavigationService.RemoveBackEntry();//RemoveThirdPage
NavigationService.RemoveBackEntry();//RemoveSecondPage
NavigationService.RemoveBackEntry();//RemoveoriginalMainPage
}
base.OnNavigatedTo(e);
}2023/1/17Microsoftconfidential54Demo:PageNavigation552023/1/17MicrosoftconfidentialApplicationBar2023/1/17Microsoftconfidential系统托盘包括一些系统自带的指示符显示系统状态(如信号,声音,日期),可以通过Microsoft.Phone.Shell.SystemTray.IsVisible=false;显示或隐藏ApplicationBar可以显示一些按钮或常用的菜单。
系统托盘和ApplicationBar2023/1/17Microsoftconfidential57用ApplicationBar替代一些自定义右键菜单。最多4个按钮。除非必须,别放满4个上滑ApplicationBar带出更多菜单。图标应该用白色的前景色放在透明的背景上。ApplicationBar2023/1/17Microsoftconfidential58ApplicationBarinXaml59<phone:PhoneApplicationPage
x:Class="CRMapp.MainPage“
…>
<phone:PhoneApplicationPage.ApplicationBar>
<shell:ApplicationBarx:Name="AppBar"Opacity="1.0"IsMenuEnabled="True">
<shell:ApplicationBar.Buttons>
<shell:ApplicationBarIconButtonx:Name="NewContactButton"IconUri="Images/appbar.new.rest.png"
Text="New"Click="NewContactButton_Click"/>
<shell:ApplicationBarIconButtonx:Name="SearchButton"IconUri="Images/appbar.feature.search.rest.png"
Text="Find"Click="SearchButton_Click"/>
</shell:ApplicationBar.Buttons>
<shell:ApplicationBar.MenuItems>
<shell:ApplicationBarMenuItemx:Name="GenerateMenuItem"Text="GenerateData"
Click="GenerateMenuItem_Click"/>
<shell:ApplicationBarMenuItemx:Name="ClearMenuItem"Text="ClearData"
Click="ClearMenuItem_Click"/>
</shell:ApplicationBar.MenuItems>
</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar></phone:PhoneApplicationPage>2023/1/17Microsoftconfidential59ApplicationBar屏幕横竖向横向时ApplicationBar在侧边切换方向时系统自带动画处理过渡2023/1/17Microsoftconfidential60如果透明度小于1,页面大小会撑满屏幕,ApplicationBar会覆盖页面如果透明度等于1,页面大小会撑到ApplicationBar,ApplicationBar则不会覆盖页面。ApplicationBar的透明度612023/1/17Microsoftconfidential61在Blend中设计ApplicationBar2023/1/17Microsoftconfidential62Demo7:Designing
anApplicationBar632023/1/17Microsoftconfidential动态更改屏幕方向2023/1/17Microsoftconfidential手机UI方向设计不是所有的应用需要横向可以通过配置让应用支持横向或倒向:652023/1/17MicrosoftconfidentialVisualStudio2012中设计方向横向和纵向设计视图2023/1/17Microsoftconfidential66选择方向67SupportedOrientations="Portrait"SupportedOrientations="PortraitOrLandscape"2023/1/17Microsoftconfidential相应的布局也许需要调整2023/1/17Microsoftconfidential68LayoutunalteredLayoutoptimisedforlandscape用Grid做横向布局第二列是在竖向时没有用到的69
<phone:PivotItemHeader="recipe">
<Grid>
<Grid.ColumnDefinitions><ColumnDefinitionWidth="*"/><ColumnDefinitionWidth="Auto"/>
</Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinitionHeight="Auto"/>
<RowDefinitionHeight="240"/><RowDefinitionHeight="*"/><RowDefinitionHeight="Auto"/>
</Grid.RowDefinitions>...</Grid>Row0Row1Row2Row3Column02023/1/17Microsoftconfidential移动元素横向布局将菜谱的描述移动到第二行第二列,现在第三行没有用到了。因为行高是*,其自动收缩为0.70
<phone:PivotItemHeader="recipe">
<Grid>
<Grid.ColumnDefinitions><ColumnDefinitionWidth="*"/><ColumnDefinitionWidth="Auto"/>
</Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinitionHeight="Auto"/>
<RowDefinitionHeight="240"/><RowDefinitionHeight="*"/><RowDefinitionHeight="Auto"/>
</Grid.RowDefinitions>...</Grid>Row0Row1Row2Row3Column0Column12023/1/17Microsoftconfidential移动元素private
voidPhoneApplicationPage_OrientationChanged(objectsender,OrientationChangedEventArgse){
if(this.Orientation==PageOrientation.LandscapeLeft||this.Orientation==
PageOrientation.LandscapeRight)
{
DirectionsScrollViewer.SetValue(Grid.RowProperty,1);
DirectionsScrollViewer.SetValue(Grid.ColumnProperty,1);
}
else
{
DirectionsScrollViewer.SetValue(Grid.RowProperty,2);
DirectionsScrollViewer.SetValue(Grid.ColumnProperty,0);
}
}2023/1/17Microsoftconfidential71Demo
8:
OrientationSupport2023/1/17MicrosoftconfidentialWindowsPhoneToolkit2023/1/17MicrosoftconfidentialWindowsPhoneToolkit原来叫SilverlightToolkit主要是扩充官方控件集里没有的功能开源,每3个月更新一次。•742023/1/17Microsoftconfidential74如何获取WindowsPhoneToolkit获取示例和源代码非微软!--添加引用通过NuGet2023/1/17Microsoftconfidential75NuGetNET下的依赖库整理系统开源第三方可以在VisualStudio2012中通过Nuget获得WindowsPhoneToolkit2023/1/17Microsoftconfidential76WindowsPhoneToolkit中的控件2023/1/17Microsoftconfidential上下文菜单2023/1/17Microsoftconfidential78时间和日期选择器792023/1/17Microsoftconfidential79状态切换器:802023/1/17Microsoftconfidential80WrapPanel812023/1/17Microsoftconfidential81ListPicker2023/1/17Microsoftconfidential82更多MessageBoxRatingcontrolpleteBoxExpanderViewHubTile下载,2023/1/17Microsoftconfidential83页面过渡效果2023/1/17Microsoftconfidential页面过渡包括Roll,Swivel,Rotate,SlideandTurnstile等方式。可以用toolkit中的TransitionFrame替代自带的PhoneApplicationFrame开始在App.xaml.cs里设置InitializePhoneApplication()函数。2023/1/17Microsoftconfidential85在Page上允许过渡效果:声明toolkit的引用:在<Phone:PhoneApplicationPage>的根元素下,添加效果:2023/1/17Microsoftconfidential86倾斜效果1,为控件的交互添加附加的视觉回馈。2,替换原始自带的简单的Pressed,UnPressed状态。3,在页面上为所有控件“开启”倾斜效果:4,也可以只应用到单个控件:2023/1/17Microsoftconfidential87Demo9:
PageTransitions
andTileEffect882023/1/17Microsoftconfidential数据绑定2023/1/17Microsoftconfidential数据绑定设置UI最简单的方式是通过设置控件的属性:
e.g.,textBox1.Text="Hello,world";在复杂的应用中,这样的代码就变得笨重且容易出错了。可以用Xaml的数据绑定连接到数据类,数据类是数据绑定的源,叫做ViewModel。UI控件可以自动地从ViewModel得到它们需要的值。改变ViewModel里的属性,显示会变。用户输入值,ViewModel里的属性也会变2023/1/17Microsoftconfidential90在XAML中绑定数据控件的属性可以绑定到数据对象的Public属性上。上例中TextBlock的Text属性绑定到数据源的Directions属性上。可以通过以下两种方式设置数据源:给任何从FrameworkElement派生的类设置DataContext属性给List(可迭代的)控件设置ItemSources属性<TextBlockx:Name="DirectionsTextBlock"TextWrapping="Wrap"
Margin="12,0,0,0"Text="{BindingDirections}"/>2023/1/17Microsoftconfidential91绑定模式Binding的Mode属性决定了如何在数据源和控件之间同步改变OneTime–控件的属性值只能被设置一次,其他的修改都被忽略OneWay–数据源的改变能影响到控件,但反过来不会TwoWay–数据源的改变能影响到控件,反之亦然
<TextBlockx:Name="DirectionsTextBlock"TextWrapping="Wrap"
Margin="12,0,0,0"Text="{BindingDirections,Mode=OneWay}"/>2023/1/17Microsoftconfidential92INotifyPropertyChanged数据源如果是OneWay或TwoWay绑定模式的话,必须实现INotifyPropertyChanged接口这个接口只有一个事件PropertyChanged需要实现当数据对象的某个属性值改变时,必须触发PropertyChanged事件XAML在运行时订阅这个事件来更新UI元素的显示数据public
class
ItemViewModel:INotifyPropertyChanged{
public
event
PropertyChangedEventHandlerPropertyChanged;…}2023/1/17Microsoftconfidential93ViewModel在WindowsPhone7.1中的实现因为MagicStrings的原因,老式风格的实现容易出错
public
class
ItemViewModel:INotifyPropertyChanged{
private
string_id;///SampleViewModelproperty;thispropertyisusedtoidentifytheobject.public
stringID{
get{return_id;}
set{
if(value!=_id){_id=value;NotifyPropertyChanged("ID");}}}
public
event
PropertyChangedEventHandlerPropertyChanged;
private
voidNotifyPropertyChanged(StringpropertyName){
PropertyChangedEventHandlerhandler=PropertyChanged;
if(null!=handler){handler(this,new
PropertyChangedEventArgs(propertyName));}}}2023/1/17Microsoftconfidential94ViewModelImplementationinWindowsPhone8.0新的风格:CallerMemberName特性:
public
class
ItemViewModel:INotifyPropertyChanged{
private
string_id;public
stringID{
get{return_id;}
set{this.SetProperty(ref
this._id,value);}}
public
event
PropertyChangedEventHandlerPropertyChanged;
protected
boolSetProperty<T>(refTstorage,Tvalue,[CallerMemberName]StringpropertyName=null){
if(object.Equals(storage,value))return
false;storage=value;
this.OnPropertyChanged(propertyName);
return
true;}
protected
voidOnPropertyChanged([CallerMemberName]stringpropertyName=null){
vareventHandler=this.PropertyChanged;
if(eventHandler!=null)eventHandler(this,new
PropertyChangedEventArgs(propertyName));}}2023/1/17Microsoftconfidential95绑定到列表通过设置ItemsSource属性,可以将列表控件可以绑定到集合,对于OneWay或TwoWay模式,必须实现ObservableCollection,且ObservableCollection中的项必须实现INotifyPropertyChanged接口。
<ListBoxx:Name="IngredientsLIstBox"
ItemTemplate="{StaticResourceStringTemplate}"
ItemsSource="{BindingIngredients}"/>2023/1/17Microsoftconfidential96ObservableCollections97
///
<summary>///AcollectionforItemViewModelobjects.
///
</summary>
public
ObservableCollection<ItemViewModel>Items{get;private
set;}public
voidLoadData(){this.Items.Add(new
ItemViewModel(){ID="0",LineOne="runtimeone",LineTwo=...});
this.Items.Add(new
ItemViewModel(){ID="1",LineOne="runtimetwo",LineTwo=...});
this.Items.Add(new
ItemViewModel(){ID="2",LineOne="runtimethree",LineTwo=...});}2023/1/17Microsoftconfidential97MVVMMVVM=Model-View-ViewModel,是一种架构模式Model,暴露数据,从本地存储或远程存储获取数据。ViewModel,绑定数据到View。View,实现表现层,显示数据并接收用户的输入,View不应该包含业务逻辑。更多介绍:(v=vs.92).aspx
MVVMLight框架:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抖音短视频内容创作者内容审核规范合同
- 高端商务酒店管理及运营合作协议
- 商标注册与品牌形象策划服务合同
- 创意网络小说作品授权与二次开发合同
- 教育机构场地转租与教育咨询服务协议
- 二手房交易钥匙交付与产权过户协议
- 游艇改装项目保险经纪合作协议
- 家庭消防安全责任书(含消防演练组织)
- 气象灾害预警服务补充协议
- 高收益茶园种植与产品市场拓展合同
- 视屏号认证授权书
- 《场站商务管理》课件
- 涉密项目管理流程培训
- 2024年水产技术养殖服务合同范本
- 广告设计师三级理论知识鉴定要素细目表
- 辽宁省协作校2024-2025学年高二英语下学期期末考试试题
- JBT 12530.1-2015 塑料焊缝无损检测方法 第1部分:通.用要求
- 坟墓赠与合同范本
- Unit3 Lesson16 An Email Is Fast(教案 )冀教版(三起)英语五年级下册
- DL-T5054-2016火力发电厂汽水管道设计规范
- 交响音乐赏析智慧树知到期末考试答案章节答案2024年西安交通大学
评论
0/150
提交评论