5.3 MVVM模型

一、MVVM的基本概念

MVVM的基本概念:Model、View、ViewModel

組件職責示例內容
Model封裝業務數據User類,包含姓名、年齡屬性
View負責UI呈現XAML界面,包含數據綁定
ViewModel連接View和Model,處理視圖邏輯MainViewModel包含命令和綁定屬性

二、例子:

2.1.Model

  // Models/User.cspublic class User : INotifyPropertyChanged{private string _name;private int _age;public string Name{get => _name;set{_name = value;OnPropertyChanged(nameof(Name));}}public int Age{get => _age;set{_age = value;OnPropertyChanged(nameof(Age));}}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged( string propertyName  ){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}

2.2 ViewModel

  // ViewModels/MainViewModel.cspublic class MainViewModel : INotifyPropertyChanged{private User _user = new User { Name = "張三", Age = 25 };public User User{get => _user;set{_user = value;OnPropertyChanged(nameof(User));}}// 命令定義public ICommand SaveCommand{get{return new RelayCommand(SaveUser,  CanSaveExecute);}}bool CanSaveExecute(){return true;}private void SaveUser(){MessageBox.Show($"保存成功:{User.Name}, {User.Age}");}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName ){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}

2.3? ICommand (基本都是格式化的)

 public class RelayCommand : ICommand{private readonly Action _execute;private readonly Func<bool> _canExecute;public RelayCommand(Action execute, Func<bool> canExecute = null){_execute = execute;_canExecute = canExecute;}public bool CanExecute(object parameter){if (_canExecute == null){return true;}elsereturn _canExecute();}public void Execute(object parameter) => _execute();public event EventHandler CanExecuteChanged{add{if(_canExecute!=null){CommandManager.RequerySuggested += value;}                }remove{if (_canExecute != null){CommandManager.RequerySuggested -= value;}}           }}

2.4 調用

 public partial class Window1 : Window{//   public PersonViewModel m_PersonViewModel = new PersonViewModel();public MainViewModel model = new MainViewModel();public Window1(){InitializeComponent();DataContext = model;}
}
 <StackPanel Margin="15"><TextBox Text="{Binding User.Name,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"Margin="0,0,0,10"/><TextBox Text="{Binding User.Age, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"Margin="0,0,0,10"/><Button Content="保存" Command="{Binding SaveCommand}"Padding="10,5"/></StackPanel>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74132.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74132.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python采集淘寶拍立淘按圖搜索API接口,json數據示例參考

以下是關于淘寶拍立淘按圖搜索API接口的詳細說明及JSON數據示例&#xff1a; 一、接口概述 淘寶拍立淘按圖搜索API接口是淘寶開放平臺提供的一項基于圖像識別技術的服務&#xff0c;允許開發者通過上傳商品圖片&#xff0c;獲取與圖片相似或相同的商品列表。該接口廣泛應用于…

每天學一個 Linux 命令(8):ls

大家好,歡迎來到《每天掌握一個Linux命令》系列。在這個系列中,我們將逐步學習并熟練掌握Linux命令,今天,我們要學習的命令是ls。 01 什么是ls命令 在Linux系統中,ls命令是“list”的縮寫,其英文全稱為“list directory contents”,即“列出目錄內容”。該命令非常實用…

00.【Linux系統編程】 Linux初識(云服務器設置CentOS并使用、Xshell鏈接云服務器)

目錄 一、華為云服務器免費體驗申請 二、Xshell遠程鏈接創建好的華為云服務器 2.1 下載Xshell 2.2 Xshell遠程連接華為云服務器 一、華為云服務器免費體驗申請 華為云官網 1. 進入華為云官網&#xff0c;最上面一欄點活動&#xff0c;并進入免費體驗中心。 2. 找到含有“…

arm非對齊訪問編譯器選項

gcc編譯選項&#xff1a; -munaligned-access gcc編譯選項&#xff1a; -mno-unaligned-access Enables (or disables) reading and writing of 16- and 32- bit values from addresses that are not 16- or 32- bit aligned. By default unaligned access is disabled for…

jmeter線程組高并發(詳細講解)

在 JMeter 中&#xff0c;線程組是測試計劃的核心組件&#xff0c;用于定義虛擬用戶&#xff08;線程&#xff09;的行為。線程組的屬性決定了測試的并發用戶數、加載速度、運行時間等。以下是線程組屬性的詳細講解&#xff1a; 1. 名稱&#xff08;Name&#xff09; 定義&…

vs2022中使用spdlog、C++日志

spdlog::set_level(spdlog::level::info); // 只顯示info及比info高級的信息&#xff0c;trace 和 debug 不顯示 參考&#xff1a;Windows10中使用VS2022和Cmake編譯構建C開源日志庫-spdlog-騰訊云開發者社區-騰訊云 spdlog C日志管理 | 快速上手教程 - 知乎 1.按照上述步驟…

SOME/IP-SD -- 協議英文原文講解10

前言 SOME/IP協議越來越多的用于汽車電子行業中&#xff0c;關于協議詳細完全的中文資料卻沒有&#xff0c;所以我將結合工作經驗并對照英文原版協議做一系列的文章。基本分三大塊&#xff1a; 1. SOME/IP協議講解 2. SOME/IP-SD協議講解 3. python/C舉例調試講解 5.1.5 Non…

STM32 ADC轉換完成回調函數詳解 HAL_ADC_ConvCpltCallback與HAL_ADC_ConvHalfCpltCallback

HAL_ADC_ConvCpltCallback 和 HAL_ADC_ConvHalfCpltCallback 是 STM32 HAL 庫中用于處理 ADC&#xff08;模數轉換器&#xff09;轉換完成事件的回調函數。它們分別在 ADC 轉換完成和轉換完成一半時被調用。以下是它們的詳細說明&#xff1a; 1. HAL_ADC_ConvCpltCallback 功能…

Android OpenGLES 360全景圖片渲染(球體內部)

概述 360度全景圖是一種虛擬現實技術&#xff0c;它通過對現實場景進行多角度拍攝后&#xff0c;利用計算機軟件將這些照片拼接成一個完整的全景圖像。這種技術能夠讓觀看者在虛擬環境中以交互的方式查看整個周圍環境&#xff0c;就好像他們真的站在那個位置一樣。在Android設備…

代碼隨想錄算法訓練營第三十二天 | 509.斐波那契數 70.爬樓梯 746.使用最小花費爬樓梯

509. 斐波那契數 題目鏈接&#xff1a;509. 斐波那契數 - 力扣&#xff08;LeetCode&#xff09; 文章講解&#xff1a;代碼隨想錄 視頻講解&#xff1a;手把手帶你入門動態規劃 | LeetCode&#xff1a;509.斐波那契數_嗶哩嗶哩_bilibili 思路&#xff1a;輸入&#xff1a;…

拼多多 anti-token unidbg 分析

聲明: 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 逆向分析 版本7.3-7.4 都試過加密沒什…

【工具】BioPred一個用于精準醫療中生物標志物分析的 R 軟件包

介紹 R 語言包 BioPred 提供了一系列用于精準醫療中的亞組分析和生物標志物分析的工具。它借助極端梯度提升&#xff08;XGBoost&#xff09;算法&#xff0c;并結合傾向得分加權和 A 學習方法&#xff0c;幫助優化個體化治療規則&#xff0c;從而簡化亞組識別過程。BioPred 還…

橫掃SQL面試——時間序列分組與合并(會話劃分)問題

橫掃SQL面試題 &#x1f4cc; 時間序列分組與合并問題 &#x1f4da; 橫掃SQL面試——時間序列分組與合并解析 &#x1f31f; 核心問題類型 時間序列分組&#xff08;Sessionization&#xff09; 處理具有時間維度的連續數據流&#xff0c;根據特定規則&#xff08;如時間間隔…

PCB鉆孔之多邊形孔分析

問題分析 在鉆孔過程中&#xff0c;鉆頭的運動可以分為兩部分&#xff1a; 公轉&#xff1a;鉆頭的軸線繞理想軸線&#xff08;鉆孔中心線&#xff09;做圓周運動。自轉&#xff1a;鉆頭繞自身軸線做旋轉運動。 由于公轉和自轉的疊加&#xff0c;鉆尖的運動軌跡會形成復雜的…

Android源碼之App啟動

目錄 App啟動概述 App啟動過程 App啟動過程圖 源碼概述 跨進程啟動 進程內啟動 下面以應用桌面Launcher啟動App的MainActivity來舉例&#xff1a; App啟動概述 首先&#xff0c;MainActivity是由Launcher組件來啟動的&#xff0c;而Launcher又是通過Activity管理服務Act…

指紋瀏覽器技術解析:如何實現多賬號安全運營與隱私保護

瀏覽器指紋的挑戰與需求 在數字化運營場景中&#xff0c;瀏覽器指紋技術被廣泛用于追蹤用戶行為。通過采集設備硬件參數&#xff08;如屏幕分辨率、操作系統&#xff09;、軟件配置&#xff08;如字體、插件&#xff09;及網絡特征&#xff08;如IP地址、時區&#xff09;&…

生活電子常識——cmd不能使用anaconda的python環境,導致輸入python打開應用商店

前言 電腦已經安裝了anaconda,從自帶的Anaconda Prompt (Anaconda3)中是可以識別python環境的&#xff0c;然而切換到cmd時&#xff0c;突然發現cmd中無法識別anaconda的python環境&#xff0c;竟然打開了應用商店讓我安裝Python&#xff0c;這當然是不對的。 解決 這是因為…

搭建前端環境和后端環境

搭建前端環境 ①、安裝vscode&#xff0c;并安裝相應的插件工具 ②、安裝node.js&#xff0c;可以選擇當前版本&#xff0c;或者其他版本 ③、創建工作區 創建一個空文件夾&#xff0c;然后通過vscode工具打開&#xff0c;保存為后綴名為.code-workspace ④、從gitee…

Java基礎知識總結(1.8)——Java 注解(持續更新)

更新時間&#xff1a;2025-03-31 Web后端專欄&#xff1a;CSDN專欄——理論-Web后端技術博客總目錄&#xff1a;計算機技術系列博客——目錄頁 8.1 注解的概念 8.1.1 定義與作用 Java注解&#xff08;Annotation&#xff09;是Java語言自JDK1.5版本引入的核心特性&#xff0…

線程概念與控制(下)

線程概念與控制&#xff08;中&#xff09;https://blog.csdn.net/Small_entreprene/article/details/146539064?sharetypeblogdetail&sharerId146539064&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link對于之前學習的內容&#xff0c;我們…