WPF MVVM模式不用Prism

Posted liu_xh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 = "123@qq.com";
40             StudentTemp.StudentSex = "大帅哥";
41 
42             Student = StudentTemp;
43         }
44     }

 

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

以上是关于WPF MVVM模式不用Prism的主要内容,如果未能解决你的问题,请参考以下文章

使用 Prism 和 MVVM 模式在 WPF 中创建模态对话框的“漂亮”方式

C# WPF MVVM模式Prism框架从零搭建(经典)

C# WPF MVVM模式Prism框架从零搭建(经典)

C# WPF MVVM模式Prism框架下事件发布与订阅

[WPF] 使用 MVVM Toolkit 构建 MVVM 程序

六从GitHub浏览Prism示例代码的方式入门WPF下的Prism之MVVM中的FilteringEvents