2011-12-02 66 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模式。