编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> Windows Phone -> 在WindowsPhone开发中使用MVVM设计模式 -> 正文阅读

[Windows Phone]在WindowsPhone开发中使用MVVM设计模式

相信.NET程序员多多少少都听说过MVVM的设计模式,对于一个大一点的项目来说,使用这种设计模式无疑是一种不错的选择, 它提高了程序的可维护性,降低了耦合度,可以实现代码的重用,方便独立开发和进行测试。这里,笔者讲述一下如何在WindowsPhone中开发使用这种设计模式。
功能描述:通过在前台显示和更改数据来保证后台数据可以实时更新,始终与前台保持一致。
首先,我们建立一个空的WindowsPhone工程,分别为当前工程中添加一个ViewModel文件夹和Model文件夹,用于储存不同的类文件,这样方便进行管理和编写,如图一所示:


图一
其次,我们需要在Model文件夹中创建一个Person类,用于在后台存储数据,示例代码如下所示:

 1 namespace MVVMDemo.Model
 2 {
 3     /// <summary>
 4     /// 该类继承INotifyPropertyChanged,用于对属性值放生改变时的通知
 5     /// 需要自定义实现一个对应的通知函数:FirePropertyChanged
 6     /// </summary>
 7    public class Person:INotifyPropertyChanged
 8    {
 9        private string _name;
10 
11        public string Name
12        {
13            get { return _name; }
14            set {
15                if (value != _name)
16                {
17                    _name = value;
18                    FirePropertyChanged();
19                }
20            }
21        }
22 
23        private int _age;
24 
25        public int Age
26        {
27            get { return _age; }
28            set {
29                if (value != _age)
30                {
31                    _age = value;
32                    FirePropertyChanged();
33                }
34            }
35        }
36 
37        public Person(string name, int age)
38        {
39            this.Name = name;
40            this.Age = age;
41        }
42 
43        public event PropertyChangedEventHandler PropertyChanged;
44 
45        public void FirePropertyChanged([CallerMemberName]string propertyName=null)
46        {
47            if (PropertyChanged != null)
48            {
49                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
50            }
51        }
52    }
53 }

再其次,我们需要在ViewModel中实现一个用于获取Model中数据的类,示例代码如下所示:

 1 namespace MVVMDemo.ViewModel
 2 {
 3     public  class GetInfo
 4     {
 5         public Person person ;
 6 
 7         public GetInfo(string name="Demo", int age=0)
 8         {
 9             person = new Person(name, age);
10         }
11 
12         public Person GetPerson()
13         {
14             return person;
15         }
16 
17         public void SetPerson(string name, int age)
18         {
19             person.Name = name;
20             person.Age = age;
21         }
22     }
23 }

最后,我们需要在View中进行相关数据的展示,笔者这里使用到了数据绑定,如果您对这一部分不是很了解的话,可以查看博客园中一些大牛的博文进行了解,我这里就直接使用了,XAML和CS对应的示例代码如下所示:

 1     <StackPanel>
 2         <GridView Header="设置值:" FontSize="20">
 3             <StackPanel>
 4                 <StackPanel Orientation="Horizontal">
 5                     <TextBlock Text="Name:" VerticalAlignment="Center"/>
 6                     <TextBox x:Name="tb_Name" Text="{Binding Name}" Width="200"/>
 7                 </StackPanel>
 8                 <StackPanel Orientation="Horizontal">
 9                     <TextBlock Text="Age" VerticalAlignment="Center"/>
10                     <TextBox x:Name="tb_Age" Text="{Binding Age}" Width="200" Margin="12"/>
11                 </StackPanel>
12                 <Button Content="修改当前值" Click="ButtonBase_OnClick"/>
13 
14                 <StackPanel Orientation="Horizontal">
15                     <TextBlock Text="Name:" VerticalAlignment="Center" FontSize="20"/>
16                     <TextBlock Text="{Binding Name}" Width="200" FontSize="20"/>
17                 </StackPanel>
18                 <StackPanel Orientation="Horizontal" >
19                     <TextBlock Text="Age" VerticalAlignment="Center" FontSize="20"/>
20                     <TextBlock Text="{Binding Age}" Width="200" Margin="12" FontSize="20"/>
21                 </StackPanel>
22             </StackPanel>
23         </GridView>
24     </StackPanel>


 1 namespace MVVMDemo
 2 {
 3     /// <summary>
 4     /// 可用于自身或导航至 Frame 内部的空白页。
 5     /// </summary>
 6     public sealed partial class MainPage : Page
 7     {
 8         private GetInfo info;
 9 
10         public MainPage()
11         {
12             this.InitializeComponent();
13 
14             this.NavigationCacheMode = NavigationCacheMode.Required;
15         }
16 
17         /// <summary>
18         /// 在此页将要在 Frame 中显示时进行调用。
19         /// </summary>
20         /// <param name="e">描述如何访问此页的事件数据。
21         /// 此参数通常用于配置页。</param>
22         protected override void OnNavigatedTo(NavigationEventArgs e)
23         {
24             // TODO: 准备此处显示的页面。
25 
26             if (e.NavigationMode == NavigationMode.New)
27             {
28                 info = new GetInfo();
29                 this.DataContext = info.GetPerson();
30             }
31 
32             // TODO: 如果您的应用程序包含多个页面,请确保
33             // 通过注册以下事件来处理硬件“后退”按钮:
34             // Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件。
35             // 如果使用由某些模板提供的 NavigationHelper,
36             // 则系统会为您处理该事件。
37         }
38 
39         private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
40         {
41             info.SetPerson(tb_Name.Text, Convert.ToInt32(tb_Age.Text));
42             this.DataContext = info.GetPerson();
43         }
44     }
45 }

最后,程序运行的效果如图二图三所示(它们操作的都是同一个对象):



图二:原始数据                                          图三:修改后的数据
可能你认为MVVM在使用中有点麻烦,但请用发展的眼看来看待它,如果你期待你的项目能够长期进行运作和扩展,那笔者还是很建议你使用这种开发方式的,因为随着你项目的逐渐扩大,你会发现管理起来确实很方便的。顺便附带一个Demo,给初学者一个参考!
如果你感觉这篇博文对你有用,请记得点赞哦!!!!!!!!!!!
  Windows Phone 最新文章
[UWP] 自定义一个ItemsPanel
WP8.1程序开发中,如何加载本地文件资源或安
UWP 律师信息 MVVM 2.0版本
Win10 FaceAPI小demo开发问题汇总
【转】UWP 捕获全局异常
x:bind不支持样式文件 或 此Xaml文件必须又
WP模拟器修改语言为中文方法
wp仿系统截图
Windows Phone 8 锁屏背景与通知
博客园新闻WP8.1客户端
上一篇文章      下一篇文章      查看所有文章
加:2015-05-27 23:04:46  更:2017-05-17 02:42:14 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 日历 万年历 2019年12日历
2019-12-8 7:54:21
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识