2016-02-24 21 views
0

我注册了MyObject类型的DependencyProperty上的回调通知。在函数中,我从DependencyObject执行到我预期的MyObject类型。这会永远返回null吗?我可以安全地从我的代码中删除空检查吗?依赖属性更改回调会返回一个意外的DependencyObject?

private static void OnMyObjectChanged(DependencyObject d, 
    DependencyPropertyChangedEventArgs e) 
{ 
    MyObject obj = d as MyObject; 
    if (obj != null) // Is this check needed? Will it ever be null? 
    { 
     ... 
    } 
} 
+0

你能有一个静态的依赖对象?我不知道它是否可以,但我知道这是WeakEvents的常见情况,它使用null来表示静态源。 –

回答

2

什么你大概的意思是这样的:

private static void OnMyObjectChanged(
    DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    var obj = d as MyObject; 
    if (obj != null) 
    { 
     ... 
    } 
} 

只要这不是一个attached property(这可能是由适用于任何派生类型的DependencyObjects),它是安全的,直接一个PropertyChangedCallback将DependencyObject参数强制转换为对象类型。这是你的财产的回调,WPF从来没有为任何其他财产调用它。

所以只写:

private static void OnMyObjectChanged(
    DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    var obj = (MyObject)d; 
    ... 
}