在WindowsPhone开发中使用MVVM设计模式
2015-05-27 14:06
330 查看
相信.NET程序员多多少少都听说过MVVM的设计模式,对于一个大一点的项目来说,使用这种设计模式无疑是一种不错的选择, 它提高了程序的可维护性,降低了耦合度,可以实现代码的重用,方便独立开发和进行测试。这里,笔者讲述一下如何在WindowsPhone中开发使用这种设计模式。
功能描述:通过在前台显示和更改数据来保证后台数据可以实时更新,始终与前台保持一致。
首先,我们建立一个空的WindowsPhone工程,分别为当前工程中添加一个ViewModel文件夹和Model文件夹,用于储存不同的类文件,这样方便进行管理和编写,如图一所示:
图一
其次,我们需要在Model文件夹中创建一个Person类,用于在后台存储数据,示例代码如下所示:
再其次,我们需要在ViewModel中实现一个用于获取Model中数据的类,示例代码如下所示:
最后,我们需要在View中进行相关数据的展示,笔者这里使用到了数据绑定,如果您对这一部分不是很了解的话,可以查看博客园中一些大牛的博文进行了解,我这里就直接使用了,XAML和CS对应的示例代码如下所示:
最后,程序运行的效果如图二图三所示(它们操作的都是同一个对象):
图二:原始数据 图三:修改后的数据
可能你认为MVVM在使用中有点麻烦,但请用发展的眼看来看待它,如果你期待你的项目能够长期进行运作和扩展,那笔者还是很建议你使用这种开发方式的,因为随着你项目的逐渐扩大,你会发现管理起来确实很方便的。顺便附带一个Demo,给初学者一个参考!
如果你感觉这篇博文对你有用,请记得点赞哦!!!!!!!!!!!
功能描述:通过在前台显示和更改数据来保证后台数据可以实时更新,始终与前台保持一致。
首先,我们建立一个空的WindowsPhone工程,分别为当前工程中添加一个ViewModel文件夹和Model文件夹,用于储存不同的类文件,这样方便进行管理和编写,如图一所示:
图一
其次,我们需要在Model文件夹中创建一个Person类,用于在后台存储数据,示例代码如下所示:
namespace MVVMDemo.Model { /// <summary> /// 该类继承INotifyPropertyChanged,用于对属性值放生改变时的通知 /// 需要自定义实现一个对应的通知函数:FirePropertyChanged /// </summary> public class Person:INotifyPropertyChanged { private string _name; public string Name { get { return _name; } set { if (value != _name) { _name = value; FirePropertyChanged(); } } } private int _age; public int Age { get { return _age; } set { if (value != _age) { _age = value; FirePropertyChanged(); } } } public Person(string name, int age) { this.Name = name; this.Age = age; } public event PropertyChangedEventHandler PropertyChanged; public void FirePropertyChanged([CallerMemberName]string propertyName=null) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } }
再其次,我们需要在ViewModel中实现一个用于获取Model中数据的类,示例代码如下所示:
namespace MVVMDemo.ViewModel { public class GetInfo { public Person person ; public GetInfo(string name="Demo", int age=0) { person = new Person(name, age); } public Person GetPerson() { return person; } public void SetPerson(string name, int age) { person.Name = name; person.Age = age; } } }
最后,我们需要在View中进行相关数据的展示,笔者这里使用到了数据绑定,如果您对这一部分不是很了解的话,可以查看博客园中一些大牛的博文进行了解,我这里就直接使用了,XAML和CS对应的示例代码如下所示:
<StackPanel> <GridView Header="设置值:" FontSize="20"> <StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="Name:" VerticalAlignment="Center"/> <TextBox x:Name="tb_Name" Text="{Binding Name}" Width="200"/> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="Age" VerticalAlignment="Center"/> <TextBox x:Name="tb_Age" Text="{Binding Age}" Width="200" Margin="12"/> </StackPanel> <Button Content="修改当前值" Click="ButtonBase_OnClick"/> <StackPanel Orientation="Horizontal"> <TextBlock Text="Name:" VerticalAlignment="Center" FontSize="20"/> <TextBlock Text="{Binding Name}" Width="200" FontSize="20"/> </StackPanel> <StackPanel Orientation="Horizontal" > <TextBlock Text="Age" VerticalAlignment="Center" FontSize="20"/> <TextBlock Text="{Binding Age}" Width="200" Margin="12" FontSize="20"/> </StackPanel> </StackPanel> </GridView> </StackPanel>
namespace MVVMDemo { /// <summary> /// 可用于自身或导航至 Frame 内部的空白页。 /// </summary> public sealed partial class MainPage : Page { private GetInfo info; public MainPage() { this.InitializeComponent(); this.NavigationCacheMode = NavigationCacheMode.Required; } /// <summary> /// 在此页将要在 Frame 中显示时进行调用。 /// </summary> /// <param name="e">描述如何访问此页的事件数据。 /// 此参数通常用于配置页。</param> protected override void OnNavigatedTo(NavigationEventArgs e) { // TODO: 准备此处显示的页面。 if (e.NavigationMode == NavigationMode.New) { info = new GetInfo(); this.DataContext = info.GetPerson(); } // TODO: 如果您的应用程序包含多个页面,请确保 // 通过注册以下事件来处理硬件“后退”按钮: // Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件。 // 如果使用由某些模板提供的 NavigationHelper, // 则系统会为您处理该事件。 } private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { info.SetPerson(tb_Name.Text, Convert.ToInt32(tb_Age.Text)); this.DataContext = info.GetPerson(); } } }
最后,程序运行的效果如图二图三所示(它们操作的都是同一个对象):
图二:原始数据 图三:修改后的数据
可能你认为MVVM在使用中有点麻烦,但请用发展的眼看来看待它,如果你期待你的项目能够长期进行运作和扩展,那笔者还是很建议你使用这种开发方式的,因为随着你项目的逐渐扩大,你会发现管理起来确实很方便的。顺便附带一个Demo,给初学者一个参考!
如果你感觉这篇博文对你有用,请记得点赞哦!!!!!!!!!!!
相关文章推荐
- 使用模型驱动开发和基于模式的工程来设计 SOA之第 4 部分
- wpf中使用MVVM模式进行开发,View与ViewModule的交互个人总结
- 使用Java开发Domino业务应用的设计模式 (cont. 1)
- 使用Java开发Domino业务应用的设计模式 (cont. 2)
- 使用MVVM模式开发自定义UserControl
- 使用Qt和Interpreter设计模式开发计算器(附源码)
- Silverlight/WPF/Windows Phone 开发之MVVM设计模式之入门
- MVVM开发模式MVVM Light Toolkit中使用事件和参数传递
- MVVM设计模式相关--Silverlight商业应用程序开发学习笔记(12)
- MVVM开发模式MVVM Light Toolkit中使用事件和参数传递
- 使用MVVM设计模式构建WPF应用程序
- 章节 1.1 软件开发方法 – 灵活,可靠的软件 使用设计模式和敏捷开发
- 灵活,可靠的软件 使用设计模式和敏捷开发
- 章节 1.2 敏捷方法 – 灵活,可靠的软件 使用设计模式和敏捷开发
- 敏捷方法 – 灵活,可靠的软件 使用设计模式和敏捷开发
- 章节 1.3 极限编程 – 灵活,可靠的软件 使用设计模式和敏捷开发
- 章节 2.1 可靠的软件 – 灵活,可靠的软件 使用设计模式和敏捷开发
- 在WP8开发中的使用MVVM模式
- Silverlight商业应用程序开发学习笔记(12) MVVM设计模式相关--
- 【WPF开发备忘】使用MVVM模式开发中列表控件内的按钮事件无法触发解决方法