2015-10-07 76 views
1

在我研究MVVM的最後幾天,我下載了幾個樣本。混合來自哪裏?

下面這篇文章是非常好的,它包含的源代碼:
更好的用戶和開發者體驗 - 從Windows窗體到WPF用MVVM
http://reedcopsey.com/series/windows-forms-to-mvvm/

當我第一次打開該項目在Visual Studio 2013的所有字段和列表像預期的那樣是空的。該程序是一個RSS閱讀器,我加載了一個包含大量填充表單中所有字段的Feed。但是現在,即使我停止了該程序,我也可以看到設計中的所有數據。

All fields and lists are filled in in design mode

這顯然是非常好的,因爲它使人們更方便查看和修改可能設計。
我想我看到的是名稱的可混合性 - 但我不確定這一點。

現在我的問題:這種混合來自哪裏?我查看了項目的源代碼,並沒有在設計模式中找到數據的來源。

在過去的幾天裏,我在Visual Studio中安裝了幾個擴展,也許我安裝了一些導致這種行爲的東西。或者,在這個例子中這可能是一些特殊的功能(這在文章的任何地方都沒有提到)。

如果可能請讓我知道這種混合來自哪裏,以及如何在我自己的項目中實現它。

回答

1

設計時間有一個漂亮的功能,如果您要將DataContext設置爲一個類,那麼該類實際上將在設計時實例化爲

這個特定窗口的DataContext很可能是一個具有執行RSS閱讀代碼的構造函數的類。

藉此例如:

public class MyRssReaderViewModel 
{ 
    public MyRssReaderViewModel() 
    { 
     //Read RSS and populate properties 
     LoadRSS(); 
    } 

    public void LoadRSS() 
    { 
     ... 
    } 
    ... 
} 

現在,如果你設置DataContext這樣的:

<Window.DataContext> 
    <ViewModels:MyRssReaderViewModel/> 
</Window.DataContex> 

設計者將實例類在設計時,並推而廣之請致電LoadRSS方法。任何引用視圖模型中屬性的元素都會更新以顯示綁定數據。

要注意的一件重要的事情是,該類將在您每次構建該項目時實例化。

+0

你說得對,我檢查過,發生了什麼事。謝謝。一個有趣的細節如下:我在必須執行的代碼中添加了一些debug.print以顯示RSS提要。這些debug.print消息在設計模式下打開窗體時不顯示。他們只顯示,如果我開始項目和表格打開。 – Edgar

+0

我相當肯定'Debug.Print'只出現在**輸出窗口**中。不管它在設計時是否出現在我的身上都是未知的,但我預計不會。但無論如何,請檢查輸出窗口。 –

+0

我知道debug.print消息應該顯示在輸出窗口中。當我運行該項目時,它們顯示在那裏,但它們不顯示是否在設計模式下打開窗口。爲了測試,我在View Model構造器中的debug.print消息後面添加了一個消息框。當我以設計模式打開表單時,該消息框也會彈出。這只是爲了說明實際上代碼甚至在設計模式下執行 - 這是我沒有想到的,但現在我明白了爲什麼發生這種情況。 – Edgar