2013-04-14 32 views
0

在我的Windows Phone應用程序(VB/XAML)中,我無法在後面的代碼中創建XAML控件,當返回頁面時。返回頁面並在代碼後面添加代碼時出錯

基本上我的頁面在崩潰時試圖做的是根據datacontext創建一些控件。控件首先被正確創建,然後當頁面被留下並返回到控件時將不再創建(不管是否使用相同的數據對象來填充頁面)。這是崩潰的線路:

ItemStack1.Children.Add(AnswerPanel1) 

我剛剛得到一個泛型「System.InvalidOperationException」錯誤。

我已經檢查過,到目前爲止,一切都如我所料 - 無論頁面如何導航,數據對象都可以正確填充。我也試圖通過在嘗試添加它之前刪除AnswerPanel1項目來縮小問題的範圍。我懷疑這個應用程序是從上次打開的時候'記住'這個頁面的,這導致我'翻倍'了一些東西。

如果我在該行附近使用「Try ... Catch」,頁面中缺少控件(這對我來說意味着控件不存在,我認爲是(重新)創建它的原因是失敗第2次

我瀏覽網頁與此:

NavigationService.Navigate("/CasebookSelectCasePage.xaml", sItem) 

...它使用一個小「助手」類傳遞sItem對象,但在類中它通常導航,這樣:

service.Navigate(New Uri(page, UriKind.Relative)) 

我想我錯過了一些基本的或顯而易見的東西......我是否需要在向後導航到首頁時刷新頁面內存不足?

+0

從故障排除中獲取更多信息:似乎只有在使用與之前發生錯誤的相同對象重新填充頁面時(例如,發送object1第一次,它完美的作品...發送object2,它工作正常...但如果我嘗試再次發送object1或object2(回到上一頁,然後再次點擊該項目啓動新頁面)我得到錯誤。在設備上,錯誤消息的第一部分是「元素已經是另一個元素的子元素」。 – pumpkinszwan

+0

我想我已經找到了問題,但沒有答案......這是我傳遞給新頁面的對象,這是問題所在。我想我需要創建一個新的副本,然後再傳遞它(我可以通過對我傳遞的對象進行硬編碼來工作,但我不知道如何創建一個正確類型的新對象來傳遞,而不是傳遞相同的複製像以前一樣。例如,點擊的對象是「Object1」,而不是傳遞Object1我想傳遞一個新的Object1(它繼承Object,但我不知道在運行時是否需要Object1或Object2等 - 但它們是全部從對象繼承) – pumpkinszwan

+0

所以,你在頁面A.然後你去到頁面B.然後你回到頁面A並崩潰了?爲什麼你再次重新生成控件?你有沒有嘗試過嗎?頁面A應該被緩存,或者在將新項目添加到ItemStack之前,先嚐試清除它 –

回答

0

你什麼時候試着準確地創建你的控件?你是在OnNavigatedTo()還是在Page_Loaded()中創建它們?這與您嘗試創建對象的方式不同。

+0

我的控件是在發送到頁面的對象(即頁面存在之前)中創建的,然後將它們添加到OnNavigatedTo()中的頁面佈局(Grid1.Children.Add方法)中。在我的解決方法中,我都創建並將控件放在OnNAvigatedTo()中,並且它按預期工作。缺點是,當我想添加新的控件類型到我的應用程序時,我必須對頁面中的邏輯進行硬編碼,而不是對象本身。 – pumpkinszwan

+0

從您的答案中無法確定,但您現在是否能夠正常工作? –

+0

我有我想要的功能,所以在這個意義上說它工作。但我重新設計了應用程序的工作原理,因爲我無法按照我嘗試的方式正常工作。 – pumpkinszwan

相關問題