WPF MVVM模式不用Prism

上一个例子使用了Prism。这个例子不用Prism。用自己封装的库LiuxhCSDLL,其实也差不多。

一、程序结构

二、界面代码以及界面效果

 1 <Window x:Class="WPFMVVMExample.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="MainWindow" Height="350" Width="525">
 5     <Grid>
 6         <Label Content="学号" Height="28" HorizontalAlignment="Left" Margin="54,23,0,0" Name="labelStudentId" VerticalAlignment="Top" />
 7         <TextBox Text="{Binding Student.StudentId}" IsReadOnly="True" Height="23" HorizontalAlignment="Right" Margin="0,27,289,0" Name="textBoxStudentId" VerticalAlignment="Top" Width="120" />
 8         <Label Content="姓名" Height="28" HorizontalAlignment="Left" Margin="54,61,0,0" Name="labelStudentName" VerticalAlignment="Top" />
 9         <TextBox Text="{Binding Student.StudentName}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,65,0,0" Name="textBoxStudentName" VerticalAlignment="Top" Width="120" />
10         <Label Content="年龄" Height="28" HorizontalAlignment="Left" Margin="54,94,0,0" Name="labelStudentAge" VerticalAlignment="Top" />
11         <TextBox Text="{Binding Student.StudentAge}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,99,0,0" Name="textBoxStudentAge" VerticalAlignment="Top" Width="120" />
12         <Label Content="Email" Height="28" HorizontalAlignment="Left" Margin="50,138,0,0" Name="labelStudentEmail" VerticalAlignment="Top" />
13         <TextBox Text="{Binding Student.StudentEmail}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,141,0,0" Name="textBoxStudentEmail" VerticalAlignment="Top" Width="120" />
14         <Label Content="性别" Height="28" HorizontalAlignment="Left" Margin="57,176,0,0" Name="labelStudentSex" VerticalAlignment="Top" />
15         <TextBox Text="{Binding Student.StudentSex}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,180,0,0" Name="textBoxStudentSex" VerticalAlignment="Top" Width="120" />
16         <Button Command="{Binding ShowCommand}" Content="显示" Height="23" HorizontalAlignment="Left" Margin="345,27,0,0" Name="buttonShow" VerticalAlignment="Top" Width="75" />
17     </Grid>
18 </Window>

三、抽象出Model

 1 public class StudentModel
 2     {
 3         #region --原有的实现--
 4         //public event PropertyChangedEventHandler PropertyChanged;
 5         //public void NotifyPropertyChanged(string propertyName)
 6         //{
 7         //    if (PropertyChanged != null)
 8         //    {
 9         //        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
10         //    }
11         //}
12
13         //private int studentId;
14
15         //public int StudentId
16         //{
17         //    get { return studentId; }
18         //    set { studentId = value; NotifyPropertyChanged("StudentId"); }
19         //}
20
21         //private string studentName;
22
23         //public string StudentName
24         //{
25         //    get { return studentName; }
26         //    set { studentName = value; NotifyPropertyChanged("StudentName"); }
27         //}
28
29         //private int studentAge;
30
31         //public int StudentAge
32         //{
33         //    get { return studentAge; }
34         //    set { studentAge = value; NotifyPropertyChanged("StudentAge"); }
35         //}
36
37         //private string studentEmail;
38
39         //public string StudentEmail
40         //{
41         //    get { return studentEmail; }
42         //    set { studentEmail = value; NotifyPropertyChanged("StudentEmail"); }
43         //}
44
45         //private string studentSex;
46
47         //public string StudentSex
48         //{
49         //    get { return studentSex; }
50         //    set { studentSex = value; NotifyPropertyChanged("StudentSex"); }
51         //}
52         #endregion
53
54         #region --新的实现--
55         public int StudentId { get; set; }
56         public string  StudentName { get; set; }
57         public int StudentAge { get; set; }
58
59         public string StudentEmail { get; set; }
60         public string StudentSex { get; set; }
61         #endregion
62     }

四、ViewModel

 1 public class StudentViewModel:INotifyPropertyChanged
 2     {
 3
 4         public event PropertyChangedEventHandler PropertyChanged;
 5         public void NotifyPropertyChanged(string propertyName)
 6         {
 7             if (PropertyChanged != null)
 8             {
 9                 PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
10             }
11         }
12
13         public DelegateCommand ShowCommand { get; set; }
14         public StudentViewModel()
15         {
16             ShowCommand = new DelegateCommand();
17             ShowCommand.ExecuteCommand = new Action<object>(ShowStudentData);
18         }
19
20         //public StudentModel Student { get; set; }
21         private StudentModel student;
22
23         public StudentModel Student
24         {
25             get { return student; }
26             set { student = value;NotifyPropertyChanged("Student"); }
27         }
28
29         private StudentModel StudentTemp;
30
31         public void ShowStudentData(object obj)
32         {
33             StudentTemp = new StudentModel();
34             Student = new StudentModel();
35
36             StudentTemp.StudentId = 1;
37             StudentTemp.StudentName = "tiana";
38             StudentTemp.StudentAge = 19;
39             StudentTemp.StudentEmail = "[email protected]";
40             StudentTemp.StudentSex = "大帅哥";
41
42             Student = StudentTemp;
43         }
44     }

注:这个程序要引入自己封装的库,LiuxhCSDLL,目前这个库还不够通用,等水平提高了再来把它优化成通用的。

时间: 2024-10-21 09:14:10

WPF MVVM模式不用Prism的相关文章

WPF MVVM模式的一些理解

/*本文转自 http://www.cnblogs.com/sirkevin/archive/2012/11/28/2793471.html */ 使用WPF+Mvvm开发一年多,期间由于对Mvvm模式的理解不足,遇到了很多问题,也绕了很多弯子:网上提供的Mvvm的示例比较简单,实际项目中的需求也各种各样.不过经过几个项目,也有了一些对Mvvm模式的理解: 1. Mvvm是什么,Mvvm是怎么来的?Mvvm模式广泛应用在WPF项目开发中,使用此模式可以把UI和业务逻辑分离开,使UI设计人员和业务

WPF MVVM模式下动画的实现

原文:WPF MVVM模式下动画的实现 在MVVM模式下,数据的显示都是通过绑定来实现的.当我们在ViewModel里修改数据时,View里面的界面会瞬间变化.但是如果我们希望这个变化有一个动画效果,应该怎么做呢? 可能一开始我们会想到DoubleAnimation.StoryBoard这些东西,但我们很快就会发现,它们只能操作View里面的元素,我们无法在ViewModel里使用它们. 我们在这里使用的方法是:创建一个类似DoubleAnimation的类,它的操作对象就是普通的double类

WPF MVVM模式

1. MVVM MVVM的设计模式最早于2005年由微软的WPF和Silverlight架构师John Gossman在他的博客中提到. WPF中采用MVVM的架构可以获得以下好处: 1. 将UI和业务的设计完全分开,View只是ViewModel的消费者 2. 有助于我们区别并哪些是UI操作,哪些是业务操作,而不是将他们混淆 3.层与层之间耦合度降低,这一点非常符合面向对象(OOP)的思想. 2.MVVM 用图来表示,这个是从网上找的图,简单明了,省去了自己画.   3.下面来一步一步写代码吧

WPF MVVM模式中,通过命令实现窗体拖动、跳转以及显隐控制

在WPF中使用MVVM模式,可以让我们的程序实现界面与功能的分离,方便开发,易于维护.但是,很多初学者会在使用MVVM的过程中遇到一个显而易见且无法回避的问题,那就是不同的窗体之间如何跳转?很多人在介绍MVVM的使用时,都没有明显提到该如何解决这一问题,不知是因为觉得太简单了还是其他原因. 博主根据自己的开发经验,写了一个简单的示例程序,介绍MVVM模式中,如何通过命令来控制窗体的跳转.拖动与显隐控制. 先看效果: 主窗体中只有一个按钮,点击该按钮后,可以打开新的窗. 新窗体可以为自定义样式窗体

WPF/MVVM模式入门教程(二):实现INotifyPropertyChanged接口

1.创建NotifyPropertyChanged类 我们在common文件夹下创建一个名为NotifyPropertyChanged.cs的类,该类继承INotifyPropertyChanged接口主要用于消息通知,当UI里的值发生改变的时候,能够触发相应的改变. using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text;

WPF MVVM模式下实现ListView下拉显示更多内容

在手机App中,如果有一个展示信息的列表,通常会展示很少一部分,当用户滑动到列表底部时,再加载更多内容.这样有两个好处,提高程序性能,减少网络流量.这篇博客中,将介绍如何在WPF ListView中实现这个功能. 实现思路:为ListView新增一个附加属性,用来绑定当下拉到底部时触发增加列表内容的功能. XAML: <Window.Resources> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConver

简易的WPF MVVM模式开发

Model层 public class Song { private string _artistName; private string _songTitle; public string SongTitle { get { return _songTitle; } set { _songTitle = value; } } public string ArtistName { get { return _artistName; } set { _artistName = value; } }

wpf mvvm模式下的image绑定

view文件 <Image Grid.Column="2" Width="48" Height="64" Stretch="Fill" Source="{Binding CaseCoverImage}" UseLayoutRounding="True" /> model文件 public BitmapImage CaseCoverImage { get { return th

【转载MVVM模式的简介】

原文链接:http://www.cnblogs.com/sirkevin/archive/2012/11/28/2793471.html 使用WPF+Mvvm开发一年多,期间由于对Mvvm模式的理解不足,遇到了很多问题,也绕了很多弯子:网上提供的Mvvm的示例比较简单,实际项目中的需求也各种各样. 不过经过几个项目,也有了一些对Mvvm模式的理解:1. Mvvm是什么,Mvvm是怎么来的? Mvvm模式广泛应用在WPF项目开发中,使用此模式可以把UI和业务逻辑分离开,使UI设计人员和业务逻辑人员