2011-12-02 39 views
0

我有一個具有兩個依賴屬性的自定義控件。它們被設定爲這樣:Silverlight:當控件離開時,依賴屬性會丟失值

Public Shared ReadOnly ValueBindingProperty As DependencyProperty = _ 
DependencyProperty.Register("ValueBinding", GetType(String), GetType(HomePageControl), New PropertyMetadata(String.Empty)) 

Public Property ValueBinding As String 
     Get 
      Return DirectCast(Me.GetValue(HomePageControl.ValueBindingProperty), String) 
     End Get 
     Set(value As String) 
      Me.SetValue(HomePageControl.ValueBindingProperty, value) 
     End Set 
End Property 

我在另一個DP的PropertyChangedCallback這樣評價他們:

Dim hpc As HomePageControl = DirectCast(d, HomePageControl) 
Dim valueBindingString as String = hpc.ValueBinding 

然後,我用它,我需要它。

值是第一次加載頁面和控件加載。一旦我離開頁面 - 使用Silverlight導航將新的「視圖」加載到框架中 - 該值將消失,當我回到頁面/視圖時,控件所在的值等於默認值而不是它的值設置在xaml中。價值發生了什麼?

我有其他的DP是仍然設置的字符串。據我所知,這兩者與其他人一樣。當其他人不這樣做時,這些爲什麼會失去價值?

回答

1

導航發生時,Silverlight從樹中刪除舊頁面並添加一個剛剛創建的新頁面。因此,當您導航到URI並返回時,您將收到一個處於默認狀態的新控件。

您應該將控件的狀態存儲在除了它們之外的某處。它可能是內存中的對象或服務器端數據庫表。選擇取決於您的要求。可能最好的一種通用方法是應用MVVM模式。