C# Windows Phone 8,将DependencyProperty用于usercontrol、PropertyChangedCallback和强制ValueCallback问题

C# Windows Phone 8,将DependencyProperty用于usercontrol、PropertyChangedCallback和强制ValueCallback问题,c#,windows-phone-8,user-controls,dependency-properties,C#,Windows Phone 8,User Controls,Dependency Properties,我正在开发一个WindowsPhone8应用程序。我在UserControl中使用了一个DependencyProperty。我发现PropertyMetadata的构造函数中的PropertyChangedCallback仅在属性值更改时触发。我对此有意见 public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register( "IsSelected", typeof

我正在开发一个WindowsPhone8应用程序。我在UserControl中使用了一个
DependencyProperty
。我发现
PropertyMetadata
的构造函数中的
PropertyChangedCallback
仅在属性值更改时触发。我对此有意见

public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register(
        "IsSelected", typeof(bool), 
        typeof(WCCSelectableButtonImageText), 
        new PropertyMetadata(
            false, 
            new PropertyChangedCallback(IsSelectedPropertyChanged))
        );

在我的代码中,我有一个属性
IsSelected
,我想在设置该属性的值时做些什么,无论该值是默认值还是更改值。但是根据,我们知道我们不能在包装器的集合定义中做任何事情。我还发现,我确信无论属性是默认的还是更改的,都会调用
强制ValueCallback
。但是在windows phone SDK中,我发现我不能使用
强制值回调
。当将值设置为
dependencProperty
时,有人知道如何调用函数吗?非常感谢

假设IsSelectedPropertyChanged符合

protected static void IsSelectedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
问题在于,由于此方法是静态的,因此无法访问类中的变量。由于与DependencyProperty相关的实际属性(变量)本身不是静态的,因此静态属性更改处理程序不知道特定于实例的属性/变量

i、 e.IsSelected是一个实例属性,但DependencyProperty IsSelectedProperty是静态的,其值changed回调也是静态的

public bool IsSelected
{
   get{(bool)GetValue(IsSelectedProperty)}
   set{SetValue(IsSelectedProperty, value)}
}

public static readonly DependencyProperty IsSelectedProperty = 
        DependencyProperty.Register("IsSelected", typeof(bool), type(thisCustomControlClassName), new PropertyMetadata(false, thisCustomControlClassName.IsSelectedPropertyChanged); 

protected static void IsSelectedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
因此,您不能执行以下操作:

protected static void IsSelectedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
   IsSelected = true; //(IsSelected (instance properties) not available in the body of a static method)
}
解决方案是将DependencyObject参数强制转换为类的实例,然后可以访问其所有实例属性和方法

DependencyPropertyChangedEventArgs将在状态更改为之前包含IsSelectedProperty的值

e.OldValue
以及中IsSelectedProperty的新值

e.NewValue 
其中e.NewValue和e.OldValue属于object类型,需要转换为您期望的类型(本例中为bool)

i、 e


假设IsSelectedPropertyChanged符合

protected static void IsSelectedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
问题在于,由于此方法是静态的,因此无法访问类中的变量。由于与DependencyProperty相关的实际属性(变量)本身不是静态的,因此静态属性更改处理程序不知道特定于实例的属性/变量

i、 e.IsSelected是一个实例属性,但DependencyProperty IsSelectedProperty是静态的,其值changed回调也是静态的

public bool IsSelected
{
   get{(bool)GetValue(IsSelectedProperty)}
   set{SetValue(IsSelectedProperty, value)}
}

public static readonly DependencyProperty IsSelectedProperty = 
        DependencyProperty.Register("IsSelected", typeof(bool), type(thisCustomControlClassName), new PropertyMetadata(false, thisCustomControlClassName.IsSelectedPropertyChanged); 

protected static void IsSelectedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
因此,您不能执行以下操作:

protected static void IsSelectedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
   IsSelected = true; //(IsSelected (instance properties) not available in the body of a static method)
}
解决方案是将DependencyObject参数强制转换为类的实例,然后可以访问其所有实例属性和方法

DependencyPropertyChangedEventArgs将在状态更改为之前包含IsSelectedProperty的值

e.OldValue
以及中IsSelectedProperty的新值

e.NewValue 
其中e.NewValue和e.OldValue属于object类型,需要转换为您期望的类型(本例中为bool)

i、 e