1. 程式人生 > >WPF MVVM模式實踐

WPF MVVM模式實踐

<一>關於在WPF中使用MVVM模式開發的資料繫結問題

在MVVM中事件通過Command屬性的繫結實現,在後臺使用RelayCommand型別實現一個命令,並且在這個屬性中呼叫事件處理函式。但是在DataTemplete中,如果只是簡單的綁定了一個RelayCommand屬性,將發生不會觸發事件處理函式的情況,這種情況下。應該這樣做:

(1)引用ViewModel的名稱空間。xmlns:local="clr-namespace:MiniSize.Entity.ViewModel"[[BR]]

(2)將一個ViewModel設定為資源

<Page.Resources>

<local:SearchViewModel x:Key="searchviewmodel"/>

</Page.Resources>

(3)

<Hyperlink x:Name="edit_hlk" Command="{Binding Source={StaticResource? searchviewmodel},Path=EditCommand?}" CommandParameter?="{Binding}">編輯</Hyperlink>

<Hyperlink x:Name="delete_hlk" Command="{Binding Source={StaticResource?

 searchviewmodel},Path=DelCommand?}" CommandParameter?="{Binding}">刪除</Hyperlink>

OK!perfect~

付一個小方法:檢視繫結的錯誤資訊。在除錯中,選擇選項和設定,選擇左側輸出視窗,將右側的繫結項屬性改為所有,就可以在程式執行時的輸出視窗看到有關繫結的問題。 (上面所遇到的問題就是,Path錯誤導致的)。

<二>MVVM頁面跳轉問題

WPF程式開啟新的視窗,直接使用new window()即可,在這裡記錄的是使用一個 window 多個Page之間實現跳轉。 主要使用的是Frame實現跳轉,具體程式碼如下: (1)((Frame)System.Windows.Application.Current.MainWindow?

.Content).NavigationService?.Navigate(Uri uri,Object model); (2)((Frame)System.Windows.Application.Current.MainWindow?.Content).NavigationService?.Navigate(Object root);

方法(2)的引數就是要跳轉的頁的例項。

<三>MVVM頁面間傳值問題

在頁面跳轉過程中往往需要傳遞一個值給新的頁面,這樣的做法在普通的WPF程式中很容易實現,但是在MVVM模式中,有一種較為通用的解決

辦法。程式碼如下:

在接收值的VIewModel中:

GalaSoft?.MvvmLight?.Messaging.Messenger.Default.Register<MiniSize?.Models.Model>(this, (model) =>

{

資料操作,model為一個引數,他是一個Model型別的例項。

});

在傳送值得ViewModel中:

Messenger.Default.Send<MiniSize?.Models.Model>(model as MiniSize?.Models.Model);

具體的執行過程是,當傳送端執行到send方法時,會跳轉到register的具體資料操作方法中執行。 需要注意的是,register必須在send存在之前而存在,也就是說在send 之前,程式必須知道有一個地方存在一個Register 否則的話在程式第一次傳值的時候是不會接收到的,只有在第二次的時候才會接收到。