1. 程式人生 > >MVVM模式的簡單案例

MVVM模式的簡單案例

=========【更多高階應用請關注公眾號】========


===================================


Model類:

using System.ComponentModel;

namespace MVVM.Model
{
    public class StudentModel : INotifyPropertyChanged
    {
        /// <summary>  
        /// 學號  
        /// </summary>  
        private int studentId;
        public int StudentId
        {
            get
            {
                return studentId;
            }
            set
            {
                studentId = value;
                NotifyPropertyChanged("StudentId");
            }
        }

        /// <summary>  
        /// 姓名  
        /// </summary>  
        private string studentName;
        public string StudentName
        {
            get
            {
                return studentName;
            }
            set
            {
                studentName = value;
                NotifyPropertyChanged("StudentName");
            }
        }

        /// <summary>  
        /// 年齡  
        /// </summary>  
        private int studentAge;
        public int StudentAge
        {
            get
            {
                return studentAge;
            }
            set
            {
                studentAge = value;
                NotifyPropertyChanged("StudentAge");
            }
        }

        /// <summary>  
        /// Email  
        /// </summary>  
        private string studentEmail;
        public string StudentEmail
        {
            get
            {
                return studentEmail;
            }
            set
            {
                studentEmail = value;
                NotifyPropertyChanged("StudentEmail");
            }
        }

        /// <summary>  
        /// 性別  
        /// </summary>  
        private string studentSex;
        public string StudentSex
        {
            get
            {
                return studentSex;
            }
            set
            {
                studentSex = value;
                NotifyPropertyChanged("StudentSex");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

ViewModel類:

using System;
using System.Windows.Input;
using MVVM.Model;

namespace MVVM.ViewModel
{
    public class StudentViewModel
    {
        public DelegateCommand ShowCommand { get; set; }
        public StudentModel Student { get; set; }
        public StudentViewModel()
        {
            Student = new StudentModel();
            ShowCommand = new DelegateCommand();
            ShowCommand.ExecuteCommand = new Action<object>(ShowStudentData);
        }
        private void ShowStudentData(object obj)
        {
            Student.StudentId = 1;
            Student.StudentName = "Mar";
            Student.StudentAge = 20;
            Student.StudentEmail = "
[email protected]
"; Student.StudentSex = "male"; } } public class DelegateCommand : 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); } else { return true; } } public void Execute(object parameter) { if (this.ExecuteCommand != null) { this.ExecuteCommand(parameter); } } public void RaiseCanExecuteChanged() { if (CanExecuteChanged != null) { CanExecuteChanged(this, EventArgs.Empty); } } } }

XMAL:
<Window x:Class="MVVM.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MVVM"
        mc:Ignorable="d"
        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" HorizontalAlignment="Left" Margin="345,27,0,0" Name="buttonShow" VerticalAlignment="Top" Width="75" />
    </Grid>
</Window>

XAML後臺:
using MVVM.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace MVVM
{
    /// <summary>
    /// MainWindow.xaml 的互動邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new StudentViewModel();
        }
    }
}


相關推薦

WPF中的MVVM模式簡單實現

hand bar alt 入門 right 一個 suggest too center 前言:在之前實現WPF程序時,我們可能會把所有的後臺邏輯都放在視圖的後臺文件中,這樣的實現方式的好處更直觀,方便,對於一些小的應用程序這樣做當然沒什麽問題,但是對於復雜的應用程序這樣寫的

android中的MVC,MVP和MVVM模式簡單總結

1.MVC View:對應於xml佈局檔案Model:實體模型Controllor:對應於Activity業務邏輯,資料處理和UI處理 xml的view功能太過於弱化,導致actvity裡面即處理業務

Vue-MVVM模式-簡單解析

Vue.js介紹Vue.js是當下很火的一個JavaScript MVVM庫,它是以資料驅動和元件化的思想構建的。相比於Angular.js,Vue.js提供了更加簡潔、更易於理解的API,使得我們能夠快速地上手並使用Vue.js。如果你之前已經習慣了用jQuery操作DOM

MVVM模式簡單案例

=========【更多高階應用請關注公眾號】======== =================================== Model類: using System.ComponentModel; namespace MVVM.Model {

設計模式_創建型模式_簡單工廠模式_案例

else ron 結果 exception mes 靜態方法 不存在 圖形 而且 使用簡單工廠模式設計一個可以創建不同幾何形狀(如圓形、方形和三角形等)的繪圖工具, 每個幾何圖形都具有繪制draw()和擦除erase()兩個方法, 要求在繪制不支持的幾何圖形時,提示一個Un

簡單工廠和工廠方法模式 -- 小案例

簡單工廠   1 public interface Fruit { 2 public void pro(); //生產水果 3 public void eat(); //吃水果 4 } 1 public class Apple implements Frui

RabbitMQ簡單模式入門案例

匯入jar包                            <!-- 訊息佇列 -->

WPF實戰案例-MVVM模式下在Xaml中彈出窗體

  相信很多學習和開發wpf專案的同學都瞭解過mvvm模式,同樣,在mvvm模式下會有一個不可忽視的問題,就是怎麼在xaml中彈出窗體,而不破壞MVVM本身的結構。 關於彈出窗體的方式還是很多的,本文先講一下用觸發器做處理。 我們先要在xaml中引用  xmlns:i="http:

對Android中設計模式MVC,MVP,MVVM簡單理解

設計模式VS框架框架是程式碼的重用,可擴充套件。舉幾個簡單的例子。Spring架構,Struts架構。設計模式是設計的重用,是一種抽象的設計方法。例如MVC,MVP,MVVM。下面,我們以android開發為例,簡單比較一下三種不同的設計模式。MVCMVC是指Modle,Vi

Android開發模式之MVC,MVP和MVVM簡單介紹與區別

相信大家對MVC,MVP和MVVM都不陌生,作為三個最耳熟能詳的Android框架,它們的應用可以是非常廣泛的,但是對於一些新手來說,可能對於區分它們三個都有困難,更別說在實際的專案中應用了,有些時候想用MVP的,程式碼寫著寫著就變成了MVC,久而久之就對它們三個的選擇產生了

使用WPF+MVVM模式的小案例

WPF+MVVM模式的小案例案例主要的目錄結構 下面一步一步建立整個小程式的目錄和相應的程式碼程式。 1、開啟VS, 新建專案WPFDemo.Client.CustType(自己可以寫自己的程式名稱,這個自定義取決於自己) 2、在建資料夾Data,Models,Other

WPF-MVVM模式學習筆記2——MVVM簡單樣例

 一. MVVM理解     1. 先建立一個簡單的WPF樣例,並逐步將它重構成為MVVM模式。    這個Demo需求是:在介面上放置文字框用來顯示定義的類Student中的名字,放置Button來修改Student的名字。    剛建立好的樣例工程文件如下圖:    

圖解MVC思想(模式)及簡單案例演示

MVC框架思想原理圖 控制器(Controller)   是一個php檔案,由瀏覽器直接請求(訪問),他有2個核心工作:   1.(根據請求),決定需要什麼資料,並去呼叫模型檔案(類),獲取該資料;   2.(根據請求),決定需要將資料顯示在哪個

Note7:MVVM模式之數據綁定

!= lan 發生 xpath 在一起 枚舉 mini tail 自動更新 一、資源說明 (1)本文參考自: 一步步走進WPF的MVVM模式(二):數據綁定 WPF之數據綁定總結 二、正文 數據綁定 (Data Binding)是WPF最重要的特性之一,也是實現

MVC、MVP、MVVM模式對比總結(2)橫向構架模型

span del nec 處理請求 eth .cn pos 實現 通過 前言說明 在實戰項目及學習中來總結一下Android端項目構架 包括MVC、MVP、MVVM,主要針對移動Android端 該篇只描述橫向構架模型 目錄 1.構架基礎 2.橫向構架模型 3.縱向

淺析前端開發中的 MVC/MVP/MVVM 模式

所有 團隊 sub 策略 代碼 告訴 簡單 ava 關心 MVC,MVP和MVVM都是常見的軟件架構設計模式(Architectural Pattern),它通過分離關註點來改進代碼的組織方式。不同於設計模式(Design Pattern),只是為了解決一類問題而總結出的抽

深信服NGAF 虛擬網線模式部署案例

ngaf下一代防火墻NGAF 虛擬網線模式部署案例1.1NGAF 虛擬網線部署介紹虛擬網線部署與透明部署類似,但是應用場景有所不同。虛擬網線主要應用於多網橋的情況下。當客戶需要利用多網橋來部署 NGAF 設備,建議使用虛擬網線,而不用透明部署。主要是由於多網橋下容易出現 MAC 表錯亂問題,虛擬網線設置後

C#正則表達式簡單案例解析

class sss 枚舉 字符串的操作 option 完全匹配 裏的 需要 業務 正則表達式主要用於字符串的操作。 1.Regex.IsMatch:判斷指定的字符串是否符合正則表達式。 2.Regex.Match:提取匹配的字符串,只能提取到第一個符合的字符串。這裏還可以使

PHP面向對象-設計模式 單例模式 簡單工廠模式 工廠方法模式

單例 nbsp 私有化 {} 意義 pan php代碼 get fun 1.單例模式   單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例。即一個類只有一個對象實例。   要實現每一個類只有一個實例

集合 簡單 案例

random color ava move ast cnblogs static rand 關於 package com.oracle.Test; import java.util.ArrayList; import java.util.Collec