zoukankan      html  css  js  c++  java
  • WPF Demo15 MVVM

    项目结构如下:

    <Window x:Class="MVVMDemo.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Label Content="学号" Height="28" HorizontalAlignment="Left" Margin="54,23,0,0" Name="labelStudentId" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentId}" IsReadOnly="True" Height="23" HorizontalAlignment="Right" Margin="0,27,289,0" Name="textBoxStudentId" VerticalAlignment="Top" Width="120" />
            <Label Content="姓名" Height="28" HorizontalAlignment="Left" Margin="54,61,0,0" Name="labelStudentName" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentName}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,65,0,0" Name="textBoxStudentName" VerticalAlignment="Top" Width="120" />
            <Label Content="年龄" Height="28" HorizontalAlignment="Left" Margin="54,94,0,0" Name="labelStudentAge" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentAge}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,99,0,0" Name="textBoxStudentAge" VerticalAlignment="Top" Width="120" />
            <Label Content="Email" Height="28" HorizontalAlignment="Left" Margin="50,138,0,0" Name="labelStudentEmail" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentEmail}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,141,0,0" Name="textBoxStudentEmail" VerticalAlignment="Top" Width="120" />
            <Label Content="性别" Height="28" HorizontalAlignment="Left" Margin="57,176,0,0" Name="labelStudentSex" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentSex}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,180,0,0" Name="textBoxStudentSex" VerticalAlignment="Top" Width="120" />
            <Button Command="{Binding ShowCommand}" Content="显示" Height="23"  Margin="266,28,162,260" Name="buttonShow"  Width="75" />
            <Button Command="{Binding ResetCommand}" Content="重置" Height="23" HorizontalAlignment="Left" Margin="266,83,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
        </Grid>
    </Window>
    <!--
    MVVM,可以很好的配合WPF的数据绑定机制来实现UI与逻辑代码的分离,
    MVVM中的View表示界面,负责页面显示,ViewModel负责逻辑处理,包括
    准备绑定的数据和命令,ViewModel通过View的DataContext属性绑定至View,
    Model为业务模型,供ViewModel使用
    -->
    
    <!--
    ICommand接口中的Execute()方法用于命令的执行,CanExecute()方法用于指示当前命令
    在目标元素上是否可用,当这种可用性发生改变时便会触发接口中的CanExecuteChanged事件。
    我们可以将实现了ICommand接口的命令DelegateCommand赋值给Button(命令源)的Command
    属性(只有实现了ICommandSource接口的元素才拥有该属性),这样Button便与命令进行了绑定。
    -->
        
    using System.ComponentModel;
    
    namespace MVVMDemo.Model
    {
        public class StudentModel : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            public void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
    
            /// <summary>  
            /// 学号  
            /// </summary>  
            private int studentId;
            public int StudentId
            {
                get { return studentId; }
                set
                {
                    studentId = value;
                    OnPropertyChanged("StudentId");
                }
            }
    
            /// <summary>  
            /// 姓名  
            /// </summary>  
            private string studentName;
            public string StudentName
            {
                get { return studentName; }
                set
                {
                    studentName = value;
                    OnPropertyChanged("StudentName");
                }
            }
    
            /// <summary>  
            /// 年龄  
            /// </summary>  
            private int studentAge;
            public int StudentAge
            {
                get { return studentAge; }
                set
                {
                    studentAge = value;
                    OnPropertyChanged("StudentAge");
                }
            }
    
            /// <summary>  
            /// Email  
            /// </summary>  
            private string studentEmail;
            public string StudentEmail
            {
                get { return studentEmail; }
                set
                {
                    studentEmail = value;
                    OnPropertyChanged("StudentEmail");
                }
            }
    
            /// <summary>  
            /// 性别  
            /// </summary>  
            private string studentSex;
            public string StudentSex
            {
                get { return studentSex; }
                set
                {
                    studentSex = value;
                    OnPropertyChanged("StudentSex");
                }
            }
        }
    }
    
    
    using System;
    using System.Windows.Input;
    
    namespace MVVMDemo.Helper
    {
        public class DelegateCommandHelper : ICommand
        {
            public Action<object> ExecuteCommand = null;
            public Func<object, bool> CanExecuteCommand = null;
            public event EventHandler CanExecuteChanged;
    
            public bool CanExecute(object parameter)
            {
                if (CanExecuteCommand != null)
                {
                    return this.CanExecuteCommand(parameter);
                }
                    return true;
            }
    
            public void Execute(object parameter)
            {
                if (this.ExecuteCommand != null) this.ExecuteCommand(parameter);
            }
    
            public void RaiseCanExecuteChanged()
            {
                if (CanExecuteChanged != null) CanExecuteChanged(this, EventArgs.Empty);
            }
        }
    }
    
    using System;
    using MVVMDemo.Helper;
    using MVVMDemo.Model;
    
    namespace MVVMDemo.ViewModel
    {
        public class StudentViewModel
        {
            //显示信息
            public DelegateCommandHelper ShowCommand { get; set; }
            //重置信息
            public DelegateCommandHelper ResetCommand { get; set; }
    
            public StudentModel Student { get; set; }
    
            public StudentViewModel()
            {
                Student = new StudentModel();
                ShowCommand = new DelegateCommandHelper();
                ResetCommand = new DelegateCommandHelper();
                ShowCommand.ExecuteCommand = new Action<object>(ShowStudentData);
                ResetCommand.ExecuteCommand = new Action<object>(ResetStudentData);
            }
    
            /// <summary>
            /// 显示内容
            /// </summary>
            /// <param name="obj"></param>
            private void ShowStudentData(object obj)
            {
                Student.StudentId = 1;
                Student.StudentName = "令狐冲";
                Student.StudentAge = 18;
                Student.StudentEmail = "linghuchong@163.com";
                Student.StudentSex = "大帅哥";
            }
    
            /// <summary>
            /// 重置内容
            /// </summary>
            /// <param name="obj"></param>
            private void ResetStudentData(object obj)
            {
                Student.StudentId = 0;
                Student.StudentName ="重置";
                Student.StudentAge = 0;
                Student.StudentEmail = "重置";
                Student.StudentSex = "重置";
            }
        }
    }
    
    using System.Windows;
    using MVVMDemo.ViewModel;
    
    namespace MVVMDemo
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                this.DataContext = new StudentViewModel();  
            }
        }
    }
    

    方式二:

    目录结构如下:

    using Microsoft.Practices.Prism.ViewModel;
    
    namespace MVVM_PrismDemo2.Models
    {
        public class StudentModel : NotificationObject
        {
            private string studentId;
            public string StudentId
            {
                get { return studentId; }
                set
                {
                    studentId = value;
                    RaisePropertyChanged("StudentId");
                }
            }
    
            private string studentName;
            public string StudentName
            {
                get { return studentName; }
                set
                {
                    studentName = value;
                    RaisePropertyChanged("StudentName");
                }
            }
    
            private string studentAge;
            public string StudentAge
            {
                get { return studentAge; }
                set
                {
                    studentAge = value;
                    RaisePropertyChanged("StudentAge");
                }
            }
    
            private string studentEmail;
            public string StudentEmail
            {
                get { return studentEmail; }
                set
                {
                    studentEmail = value;
                    RaisePropertyChanged("StudentEmail");
                }
            }
    
            private string studentSex;
            public string StudentSex
            {
                get { return studentSex; }
                set
                {
                    studentSex = value;
                    RaisePropertyChanged("StudentSex");
                }
            }
        }
    }
    
    using System;
    using Microsoft.Practices.Prism.Commands;
    using Microsoft.Practices.Prism.ViewModel;
    using MVVM_PrismDemo2.Models;
    
    namespace MVVM_PrismDemo2.ViewModels
    {
        class StudentViewModel :NotificationObject
        {
            /// <summary>
            /// 定义命令属性
            /// </summary>
            public DelegateCommand DisplayDataCommand { get; set; }
            public DelegateCommand ResetDataCommand { get; set; }
            
            private StudentModel student;
            public StudentModel Student
            {
                get { return student; }
                set
                {
                    student = value;
                }
            }
    
            public StudentViewModel()
            {
                Student = new StudentModel();
    
                DisplayData();
    
                //初始化命令属性
                DisplayDataCommand = new DelegateCommand(new Action(DisplayData));
                ResetDataCommand = new DelegateCommand(new Action(ResetData));
            }
    
            private void DisplayData()
            {
                Student.StudentId = "1";
                Student.StudentName = "令狐冲";
                Student.StudentAge = "18";
                Student.StudentEmail = "linghuchong@163.com";
                Student.StudentSex = "大帅哥";
            }
    
            private void ResetData()
            {
                Student.StudentId = "0";
                Student.StudentName = "重置";
                Student.StudentAge = "0";
                Student.StudentEmail = "重置";
                Student.StudentSex = "重置";
            }
        }
    }
    
    <Window x:Class="MVVM_PrismDemo2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Label Content="学号" Height="28" HorizontalAlignment="Left" Margin="54,23,0,0" Name="labelStudentId" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentId, Mode=TwoWay}" IsReadOnly="True" Height="23" HorizontalAlignment="Right" Margin="0,27,289,0" Name="textBoxStudentId" VerticalAlignment="Top" Width="120" />
            <Label Content="姓名" Height="28" HorizontalAlignment="Left" Margin="54,61,0,0" Name="labelStudentName" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentName, Mode=TwoWay}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,65,0,0" Name="textBoxStudentName" VerticalAlignment="Top" Width="120" />
            <Label Content="年龄" Height="28" HorizontalAlignment="Left" Margin="54,94,0,0" Name="labelStudentAge" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentAge, Mode=TwoWay}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,99,0,0" Name="textBoxStudentAge" VerticalAlignment="Top" Width="120" />
            <Label Content="Email" Height="28" HorizontalAlignment="Left" Margin="50,138,0,0" Name="labelStudentEmail" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentEmail, Mode=TwoWay}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,141,0,0" Name="textBoxStudentEmail" VerticalAlignment="Top" Width="120" />
            <Label Content="性别" Height="28" HorizontalAlignment="Left" Margin="57,176,0,0" Name="labelStudentSex" VerticalAlignment="Top" />
            <TextBox Text="{Binding Student.StudentSex, Mode=TwoWay}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,180,0,0" Name="textBoxStudentSex" VerticalAlignment="Top" Width="120" />
            <Button Command="{Binding DisplayDataCommand}"  Content="显示" Height="23"  Margin="266,28,162,260" Name="buttonShow"  Width="75" />
            <Button Command="{Binding ResetDataCommand}" Content="重置" Height="23" HorizontalAlignment="Left" Margin="266,83,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
        </Grid>
    </Window>
    using System.Windows;
    using MVVM_PrismDemo2.ViewModels;
    
    namespace MVVM_PrismDemo2
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                this.DataContext = new StudentViewModel();  
            }
        }
    }
    

  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/YYkun/p/6872269.html
Copyright © 2011-2022 走看看