- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发 Windows Phone 8 应用程序。我在我的 UserControl 中使用 DependencyProperty
。我发现 PropertyMetadata
的构造函数中的 PropertyChangedCallback
仅在属性值更改时触发。我对此有疑问。
public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register(
"IsSelected", typeof(bool),
typeof(WCCSelectableButtonImageText),
new PropertyMetadata(
false,
new PropertyChangedCallback(IsSelectedPropertyChanged))
);
在我的代码中,我有一个属性IsSelected
,我想在为其设置值时做一些事情,无论该值是默认值还是已更改。但是根据this ,我们知道我们不能在包装器的集合定义中做任何事情。我也找到了 this ,我确信无论属性是默认的还是更改的,CoerceValueCallback
都会被调用。但是在windows phone SDK中,我发现我不能使用CoerceValueCallback
。有人知道在将值设置为 DependencyProperty
时如何调用函数吗?非常感谢
最佳答案
假设 IsSelectedPropertyChanged 符合
protected static void IsSelectedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
问题是因为这个方法是静态的,所以它不能访问类中的变量。由于与 DependencyProperty 相关的实际属性(变量)本身不是静态的,因此静态属性更改处理程序不知道特定于实例的属性/变量。
即IsSelected 是一个实例属性,但是 DependencyProperty IsSelectedProperty 是静态的,它的值更改回调也是静态的。
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 是对象类型,需要转换为您期望的类型(本例中为 bool)。
即
protected static void IsSelectedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
var control = (thisCustomControlClassName)o;
control.IsSelected = (bool)e.NewValue;
}
关于c# - Windows Phone 8,将 DependencyProperty 用于用户控件、PropertyChangedCallback 和 CoerceValueCallback 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20726144/
我有一个用户控件,它有两个 DependencyProperties。每个 DependencyProperty 都有 PropertyChangedCallback。在设置属性值的顺序中调用回调很重
看起来 WPF 并不总是调用 DependencyProperty 的已注册 PropertyChangedCallback 过程。即使我们从 VM 手动引发 PropertyChanged 事件,W
这已经困扰我一段时间了,所以我问了一个同事他是否能理解它,现在我来了;) 为什么可以在依赖属性的 PropertyChangedCallback 中访问持有类的私有(private)成员? 让我通过这
我有一个 TextBox 绑定(bind)到一个依赖属性,我已经实现了一个 PropertyChangedCallBack 函数,当文本更改时我需要调用 textbox.ScrollToEnd() 但
如果有自己的用户控件,带有 DependencyProperty 和相应的回调方法,如下所示: public partial class PieChart : UserControl { pu
我有一个依赖属性和一个回调。 public static readonly DependencyProperty IsBusyProperty = DependencyProp
我有一个派生自 System.Windows.Controls.UserControl 的类,我需要将 PropertyChangedCallback 添加到 FrameworkElement.Mar
我创建了一个派生自 Canvas 的控件,它应该绘制一个实时图表,给定值通过绑定(bind)传递给 DependencyProperty。简化版是这样的: public class Plotter :
我有一个具有三个属性 (x1,x2,x3) 和该属性的 PropertyChangedCallback 的对象集合。 此集合绑定(bind)到 Wpf DataGrid。然后我想用像“x1+x2”这样
我有一个类的依赖属性,我们称它为“SomethingControl”: public static readonly DependencyProperty SomethingProperty = De
我有一个用户控件,它公开了一个名为 VisibileItems 的 DependencyProperty每次更新该属性时,我都需要触发另一个事件。为此,我添加了一个带有 PropertyChanged
我正在创建一个具有PropertyChangedCallback依赖项属性的WPF CustomControl。在该Callback方法中,我尝试使用GetTemplateChild()方法从OnAp
DependencyProperty.OverrideMetadata() 是否也覆盖了 PropertyChangedCallback? 最佳答案 取自此处:http://msdn.microsof
DependencyProperty.OverrideMetadata() 是否也覆盖了 PropertyChangedCallback? 最佳答案 取自此处:http://msdn.microsof
我的大体理解是,当属性发生变化时,会立即执行本地回调。所以我可以假设这会立即发生。但是,绑定(bind)属性的回调在绑定(bind)传播之前不会发生,这可能不会立即发生。这是正确的吗? 最佳答案 听起
我想在每次更改属性时执行一些代码。以下在一定程度上起作用: public partial class CustomControl : UserControl { public bool
我有一个带有文本框的用户控件和一个基本上是带有 CollectionView 的 ListBox 的自定义列表控件。我想使用 CollectionView 的过滤器功能并使用文本框中的文本来过滤可见元
我正在创建一个 WinRT CustomControl,它具有 PropertyChangedCallback 的依赖属性。在该回调方法中,我尝试为我使用 GetTemplateChild() 方法从
我的应用程序使用 MVVM 架构,ViewModel 不了解 View。当 ViewModel 对象需要显示新 View 时,它会公开一个公共(public) ShowNewView 属性,该属性是一
我需要从 ViewModel 将焦点设置到 UIElement 的附加属性。我创建了 Attached 属性,并在 PropertyChangedCallback 中将焦点设置到 UIElement。
我是一名优秀的程序员,十分优秀!