2016-03-04 26 views
0

交流看法,我創造了一些網頁Xamarin.Forms:在容器

this.content1 = new DetailPage("ContentPage1"); 
this.content2 = new DetailPage("ContentPage2"); 

,我已經定義了一個場

private View detailView; 

與以下佈局

Content = new StackLayout 
{ 
    Padding = new Thickness(0, Device.OnPlatform<int>(20, 0, 0), 0, 0), 
    Orientation = StackOrientation.Horizontal, 
    Children = { 
     buttonContainer, 
     this.detailView, 
    }, 
}; 

在一個按鈕上單擊應該交換detailView

private void Button1_Clicked(object sender, EventArgs e) 
{ 
    this.detailView = this.content1.Content; 
} 

點擊事件被調用,但視圖未被更新。這是在容器中交換「子視圖」的錯誤方法嗎?這是如何完成的?

+0

請告訴我的默認值'detailview'?這可能是一個簡單的錯字,你已經使用'this.detailView = this.content1.Content;'它應該是'this.detailView = this.content2.Content;'? – user1

+0

'content1.Content'是默認值。我有多個不同內容的按鈕,但'detailView'總是'content1'。沒有錯字。 – testing

回答

2

您需要從Children集合中刪除當前的detailView,然後添加新的視圖。簡單地交換detailView的值不會影響視覺用戶界面。

如果我正確地理解你的代碼片段的情況下,那麼這應該解決的問題,在您的Button1_Clicked處理程序:

((StackLayout) Content).Children.Remove(this.detailView); 
this.detailView = this.content1.Content; 
((StackLayout) Content).Children.Add(this.detailView); 
+0

您是否也知道內存管理應該如何完成? – testing

+1

只要您知道此代碼由於content1/content2成員字段而始終將所有這些詳細信息頁保留在內存中,就不應該擔心有關內存管理的任何問題。 您可以將它們定義爲惰性​​,這會推遲構建/分配,直到它們實際得到使用。但除此之外,可能沒有什麼需要公開關注的。 這並不一定意味着你的實際代碼沒有內存泄漏 - 但是這個代碼並不看起來很邪惡。 –