柚子快報激活碼778899分享:WPF —— MVVM架構(gòu)
?1 什么是MVVM?
MVVM是一種軟件架構(gòu)模式,它將應(yīng)用程序分為三個層次 model(數(shù)據(jù)模型),view(視圖),viewmodel(視圖模型)
model:表示應(yīng)用程序當(dāng)中數(shù)據(jù)和業(yè)務(wù)邏輯,通俗來說就是對象。例如學(xué)生的姓名和年齡等放到一個class里面,作為一個對象 view:就是xaml文件,處理用戶交互和展示數(shù)據(jù)的 交互就是事件click,展示就是數(shù)據(jù)綁定等 viewmodel:數(shù)據(jù)和頁面之間的橋梁,可以處理一些ui邏輯,也可以處理數(shù)據(jù)綁定,可以執(zhí)行ui界面的命令(類似于事件) 也可以處理ui界面事件。 三者之間的關(guān)系 view對應(yīng)一個viewmodel,一個viewmodel對應(yīng)N個model, mvvm核心特點數(shù)據(jù)驅(qū)動視圖,通過修改數(shù)據(jù)達(dá)到更新界面的效果?
2 MVVM和WPF關(guān)系?
WPF帶來的技術(shù)有數(shù)據(jù)綁定,Binding(綁定)、依賴屬性、RoutedEvent(路由事件) 、Command指令 DataTemplate數(shù)據(jù)模版、ControlTemple控件模版等技術(shù) 這些技術(shù)就可以實現(xiàn)mvvm設(shè)計需求。
3 MVVM優(yōu)勢?
1.降低view和model之間的耦合度。 2.提高代碼的重用性和可維護(hù)性。 3.簡化了單元測試? 4.支持雙向綁定,數(shù)據(jù)可以更改界面,界面更新也會影響數(shù)據(jù) 5 利用wpf里面強大的特性
4 wpf實現(xiàn)mvvm設(shè)計模式 需要知識點
??1INotifyPropertyChanged,我們在使用Binding綁定數(shù)據(jù)時候,通過修改數(shù)據(jù)不會達(dá)到界面更新的效果,原因
就是在數(shù)據(jù)變化沒有發(fā)出通知,所以可以這個接口檢查到屬性變化之后發(fā)出通知。
? ?2ICommand:wpf一種機制,類似于事件綁定,但是又和事件綁定有區(qū)別, ? ?例如有幾個頁面需要綁定點擊的時候關(guān)閉窗體的功能,如果是采用事件綁定,可以在每一個頁面添加綁定, ? 命令可以寫在其他類里面,由不同窗體進(jìn)行調(diào)用 ? 事件綁定具有局限性, ? 命令系統(tǒng)內(nèi)置一部分的命令 ,內(nèi)置的指令有復(fù)制 粘貼、剪切等指令 也可以通過ICommand創(chuàng)建一個命令
MVVM概念
設(shè)置WPF界面
Width="100" Height="40">
Name="c1" Width="100" Height="40" Margin="0,100,0,0">
創(chuàng)建類繼承INotifyPropertyChanged
public partial class MainWindow : Window, INotifyPropertyChanged
/2實現(xiàn)接口方法
public event PropertyChangedEventHandler PropertyChanged;
3 定義屬性在set調(diào)用方法,發(fā)出通知
private string name = "喬峰";
public string Name1
{
get
{
return name;
}
set
{
name = value;
PropertyChanged(this, new PropertyChangedEventArgs("Name1"));
}
}
public bool Sex { get;set; } = true; //屬性的更改不會觸發(fā)界面更新
private ObservableCollection
public ObservableCollection
get
{
return names;
}
set
{
names = value;
PropertyChanged(this, new PropertyChangedEventArgs("Names"));
}
}
Button的事件
private void f1(object sender, RoutedEventArgs e)
{
Name1 = "李四"; //可以達(dá)到界面更新的目的
Sex = false; // 不可以達(dá)到界面更新的目的
Names.Add("王大拿");// 數(shù)組里面是有的,不可以達(dá)到界面更新的效果
// List添加等操作不可以達(dá)到界面更新的效果.,把集合定義成List改成ObservableCollection這種類型
}
效果圖如下
更新數(shù)據(jù)前
更新數(shù)據(jù)后
柚子快報激活碼778899分享:WPF —— MVVM架構(gòu)
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。