zoukankan      html  css  js  c++  java
  • 从一个prismWpfMVVM的例子中学到的

    整个程序如下,从博客园一个作者看到的例子,但是对这个例子做了点修改。我觉得这个更符合MVVM模式。这个用到了prism框架,在项目中要引用Microsoft.Practices.Prism.dll

    按照程序开发顺序记录如下步骤:

    一、先设计界面,这样才知道有哪些Model。

    相应的xaml代码如下:

     1 <Window x:Class="PrismMvvmExample.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>

    二、然后就是从UI界面抽象出Model。

    StudentModel.cs:

     1 public class StudentModel
     2 {
     3 /// <summary> 
     4 /// 学号 
     5 /// </summary> 
     6 public int StudentId
     7 {
     8 get;
     9 set;
    10 }
    11 
    12 /// <summary> 
    13 /// 姓名 
    14 /// </summary> 
    15 public string StudentName
    16 {
    17 get;
    18 set;
    19 }
    20 
    21 /// <summary> 
    22 /// 年龄 
    23 /// </summary> 
    24 public int StudentAge
    25 {
    26 get;
    27 set;
    28 }
    29 
    30 /// <summary> 
    31 /// Email 
    32 /// </summary> 
    33 public string StudentEmail
    34 {
    35 get;
    36 set;
    37 
    38 }
    39 
    40 /// <summary> 
    41 /// 性别 
    42 /// </summary> 
    43 public string StudentSex
    44 {
    45 get;
    46 set;
    47 } 
    48 }

    三、接下来就是ViewModel了。

    StudentViewModel.cs:

     1 public class StudentViewModel:NotificationObject
     2 {
     3 public DelegateCommand ShowCommand { get; set; }
     4 
     5 public StudentViewModel()
     6 {
     7 
     8 ShowCommand = new DelegateCommand(new Action(ShowStudentInfo));
     9 
    10 }
    11 
    12 private StudentModel student;
    13 public StudentModel Student
    14 {
    15 get { return student; }
    16 set
    17 {
    18 student = value;
    19 this.RaisePropertyChanged("Student");//Student这个StudentModel类的对象改变
    20 }
    21 }
    22 
    23 public StudentModel StudentTemp { get; set; }
    24 private void LoadData()
    25 {
    26 StudentTemp = new StudentModel();
    27 StudentTemp.StudentId = 1;
    28 StudentTemp.StudentName = "tina";
    29 StudentTemp.StudentAge = 20;
    30 StudentTemp.StudentEmail = "aa@qq.com";
    31 StudentTemp.StudentSex = "大帅哥姐";
    32 }
    33 
    34 private void ShowStudentInfo()
    35 {
    36 #region --正确的方式--
    37 //this.Student = StudentTemp; 
    38 this.LoadData();
    39 //要对象改变,那么也要用一个对象赋值给它,让他改变,即用对象改变对象
    40 this.Student = StudentTemp;
    41 #endregion
    42 
    43 
    44 #region --无效的方式,程序只认为改变成员,并没有改变对象--
    45 //Student = new StudentModel();
    46 //Student.StudentId = 1;
    47 //Student.StudentName = "tina";
    48 //Student.StudentAge = 20;
    49 //Student.StudentEmail = "aa@qq.com";
    50 //Student.StudentSex = "大帅哥姐";
    51 #endregion
    52 } 
    53 }

    最后就是把ViewModel和View关联起来:

    MainWindow.xaml.cs:

  • 相关阅读:
    REST Security with JWT using Java and Spring Security
    UserMapper.selectByPrimaryKey-Inline 报错的解决办法
    Nginx反向代理,负载均衡,redis session共享,keepalived高可用
    HTML 5 Web 存储-localStorage
    Android之自定义checkbox样式
    android fragment传递参数_fragment之间传值的两种方法
    linux常用基本命令
    fragment点击跳转到外部Activity后,怎么通过返回按钮返回
    android 中FragmentActivity中模拟返回键返回上一个Activity效果
    Fragment与Activity相互传递数据:
  • 原文地址:https://www.cnblogs.com/dotnetHui/p/7905849.html
Copyright © 2011-2022 走看看