2012-12-17 14 views
0

我正在嘗試MVVM模式,並且遇到了問題。Win8應用程序疑難解答:我的XAML定義的頁面字段何時初始化?

以下是我對我的實例化模型:

<common:LayoutAwarePage 
    ... 
    ...(omitted boiler plate generated lines here) 
    ... 
    ... 
    mc:Ignorable="d"> 
    <common:LayoutAwarePage.DataContext> 
     <local:TextGameClientModel x:Name="textGameClientModel"/> 
    </common:LayoutAwarePage.DataContext> 

但是當我嘗試使用它,我得到一個的NullReferenceException因爲this.textGameClientModel是NULL:

public MainPage() 
{ 
    this.InitializeComponent(); 
    this.textGameClientModel.runsPublished += textGameClientModel_runsPublished; 
} 

我我們也嘗試了頁面的處理器中的同一行,並且也在OnLoaded處理程序,但具有相同的結果。

哪裏是正確的地方掛鉤我的事件處理程序?

(請不要讓我的代碼隱藏在MVVM項目分散你的注意力從這個問題。我的一個RichTextBox的使用迫使我行一個小框框。)

回答

1

其實我寫的關於最近的WPF Creation Steps的回答,然而在這種情況下這不是問題。

在這種情況下,你要設置你的XAML的DataContext,但是這是不一樣的設置textGameClientModel財產

你需要做這樣的事情的財產等於設置爲您DataContext第一

this.textGameClientModel = this.DataContext as GameClientModel; 

或者乾脆投你DataContext爲你的類設置事件

((GameClientModel)this.DataContext).runsPublished += textGameClientModel_runsPublished; 

作爲一個方面說明,我從不建議將DataContext硬編碼爲像UserControl一樣。通過這樣做,您可以防止任何其他DataContext傳遞到UserControl,這種類型會破壞WPF/MVVM的最大優點之一,該WPF/MVVM具有單獨的UI和數據層。

+0

那麼我不完全明白它,但它肯定有效。非常感謝! :) – BigScary

+0

@BigScary DataContext是UI層後面的數據層,當你進行綁定時,UI層通常會引用它。實際上,我在我的博客上有一篇文章,它簡單地解釋了「DataContext」的含義。 [你說的這個「DataContext」是什麼?](http://rachel53461.wordpress.com/tag/wpf-datacontext/)如果你是WPF的新手,你會覺得很有用:) – Rachel