2011-07-07 62 views
3

我正在使用MVVM使用WPF/C#的應用程序。我有一個特定ObservableCollection<>這是綁定到ListBox
保證在調用OnStartup()時所有的WPF綁定都能正常工作嗎?

方案1:當應用程序運行時,我修改此ObservableCollection<>ListBox預期被填充。

場景2:有了新的需求,我必須在默認情況下用這個ListBox填充一些init值。所以我添加了一個方法來在我的ViewModel中初始化它。在初始化視圖& ViewModel後,我在OnStartup()中調用此方法。 DataContext也被正確設置。在這種情況下,值在ObservableCollection中更新>,不幸的是它們沒有反映在ListBox中。

只是爲了驗證OnStartup()是否有任何問題,我從View的ContentRendered回調中添加了相同的方法調用,而不是OnStartup(),它確實工作正常。

所以我的問題,當確切的MVVM保證所有的綁定安裝正確?

編輯: 一個多觀察,如果我彈出一個消息/預期對話框列表框填充。它調用ContentRendered回調。然後它填充正確。

我幾乎確信ContentRendered應該是保證綁定的函數。

回答

3

我不能肯定地說這是你的問題,沒有看到代碼的變化,但它聽起來像你現在可能有一個初始值爲null你綁定的屬性。

如果您隨後將該屬性設置爲ObservableCollection<T>,則不會有自動更改通知。

一種選擇是提出屬性值更改的通知(從null到某些內容),然後讓ObservableCollection<T>處理從那裏更改通知。

更好的解決方案是從一開始就用空的ObservableCollection<T>初始化屬性,然後初始化爲默認值將意味着添加這些值,並且更改通知應按預期發生。

從非空集合開始,然後將該屬性設置爲集合的新實例而不發出通知,您可能會遇到同樣的問題,但我不是100%確定的。

如果這不是你的問題,那麼我會很高興再看一次。

+0

感謝您的回覆,該屬性已經初始化爲一個空的'ObservableCollection '。我試圖理解的問題是同樣的事情在正常使用情況下正常工作,它只是一個起點。我編輯並添加了一些更多的細節。 – vrrathod

相關問題