WPF隨筆(十三) MVVM模式下的視窗管理

2021-10-03 03:37:12 字數 2986 閱讀 9163

使用mvvm模式的wpf專案和傳統的使用事件驅動模式的wpf在處理邏輯有所不同,即使最簡單的開啟視窗也有很大差異。

public

static

class

windowmanager

//註冊視窗

public

static

void

regiter

(string key, type t)

//移除視窗

public

static

void

remove

(string key)

//開啟視窗

public

static

void

showdialog

(string key, object vm)

var win =

(window)activator.

createinstance

((type)_registerwindow[key]);

win.datacontext = vm;

win.

showdialog()

;}//開啟視窗

public

static

void

showdialog

(string key, object model,window window)

var win =

(window)activator.

createinstance

((type)_registerwindow[key]);

win.datacontext = model;

win.owner = window;

win.

showdialog()

;}}

public

static

class

windowextension

public

static

void

register

(this window win, string key, type t)

public

static

void register

(this window win, string key)

}

在viewmodel層的基類viewmodelbase中,除了定義開啟window視窗的方法外,還有messagebox訊息彈出框、檔案選擇對話方塊和資料夾選擇對話方塊。

public

class

viewmodelbase

: inotifypropertychanged

//開啟視窗並設定所屬視窗

public

void

showdialog

(string key,object args,window owner)

//訊息提示框

public

void

showmessage

(string mes, string title =

"", messageboxbutton buttons = messageboxbutton.ok)

//帶返回結果的訊息提示框

public bool showmessagewithresult

(string content,string title=

"",messageboxbutton button=messageboxbutton.okcancel)

else

}//檔案選擇對話方塊

public string showfiledialog

(string title,string filter=

"docx|*.docx"

,string folder=

"c:\\users\\administrator\\desktop"

)return filepath;

}//資料夾選擇對話方塊

public string showfolderdialog

(string title)

;return folderpath;

} #endregion

#region inotifypropertychanged

public event propertychangedeventhandler propertychanged;

protected internal virtual void

onpropertychanged

(string propertyname)

#endregion

}

在主視窗類mainwindow.xaml.cs中通過名稱註冊新的視窗。

public partial class

mainwindow

: metrowindow, isingletondependency

public

mainwindow()

}

在viewmodel層的類中,由於已經繼承了基類viewmodelbase,視窗管理相關的類都可以直接使用。

public

class

mainwindowviewmodel

: viewmodelbase

#region commands

public delegatecommands

opendemocommand

#endregion

#region methods

#region 開啟視窗示例

private

void

opendemowindow

(string obj)

#endregion

#endregion

}

WPF隨筆(十二) 使用MVVM模式

規模稍大的wpf專案一般會採用mvvm模式,常見的框架有prism mvvmlight caliburn等。今天就從頭開始建立乙個使用mvvm模式的wpf專案,對mvvm也能有乙個更好的了解。實現inotifypropertychanged介面是為了利用wpf的資料繫結特性,當資料來源發生變化時,能...

WPF程式設計,MVVM模式下控制項獲得焦點的一種方法。

mvvm模式下,viewmodel層無法直接控制項view層的控制項,這裡通過為控制項增加資料觸發器的方法,讓控制項獲得焦點。一般用於輸入輸出時讓控制項獲得焦點。其中,isfocus是vm層的乙個布林量,當為真時,textbox控制項獲得當前的焦點,用於輸入鍵盤直接輸入資料。需要注意的是,要為控制項...

MVVM模式和在WPF中的實現

我大概是從2102年底開始接觸wpf,之前一直用winform。剛開始看了下感覺跟winform區別不大,控制項可以拖進去,選中了控制項屬性面板可以設定屬性 事件面板可以監聽事件,後台 處理事件,一切都那麼的熟悉。xaml布局也跟android布局很像,所以沒學習就直接開始了,覺得摸索摸索基本就差不...