• 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();  
            }
        }
    }
    

  • 相关阅读:
    Pytorch-实战之对Himmelblau函数的优化
    Pytorch-tensor的感知机,链式法则
    Pytorch-tensor的激活函数
    Pytorch-tensor的分割,属性统计
    Pytorch-tensor的转置,运算
    Pytorch-tensor维度的扩展,挤压,扩张
    Transformer代码细节
    Leetcode 1494
    格雷码
    两个正序数组的中位数
  • 原文地址:https://www.cnblogs.com/YYkun/p/6872269.html
Copyright © 2020-2023  润新知