C# Windows Phone 8,将DependencyProperty用于usercontrol、PropertyChangedCallback和强制ValueCallback问题
我正在开发一个WindowsPhone8应用程序。我在UserControl中使用了一个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
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