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