当控件被导航离开时,依赖属性失去值



我有一个自定义控件,它有两个依赖属性。它们的设置如下:

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是保持不变的字符串。据我所知,这两个和其他的是一样的。为什么这些会贬值,而其他的不会?

当导航发生时,Silverlight会从树中删除旧页面,并添加刚刚创建的新页面。因此,当您导航到URI并返回时,您将获得一个处于默认状态的新控件。

您应该将控件的状态存储在控件之外的某个地方。它可以是内存对象或服务器端数据库表。选择取决于你的要求。也许,最好和通用的方法是应用MVVM模式。

最新更新