1

我正在开发一个标记扩展,它只在分配给 DataContext 依赖属性时才应该工作。

这是由扩展以下列方式强制执行的:

public abstract class DataContextAssignableExtensionBase  : MarkupExtension
 {

    private void ThrowOnUnsupportedProperty(IServiceProvider serviceProvider)
    {
        var dataContextProp = TargetProperty as DependencyProperty;

        if (dataContextProp == null)
            throw new ...
        if (!(dataContextProp.Name.Equals("DataContext") || dataContextProp.Name.Equals("RuntimeDataContext")))
            throw new ...
    }
}

现在,DataContext 很可能将永远保持名为 DataContext,但仍然......

我想要一种更“安全”的方式来确保将扩展分配给 DataContext 依赖属性。

帮助将不胜感激!

4

2 回答 2

1

Just do a reference comparison against the property definition:

if (dataContextProp != FrameworkElement.DataContextProperty)
    throw ...
于 2014-10-23T13:33:42.663 回答
0

除了@MikeStrobel 所说,在.NET 4.5 和 VS2013 中,了解给定 DependencyProperty 是否是设计和运行时的 DataContext 属性的唯一方法是:

if(( dependencyProperty == FrameworkElement.DataContextProperty
 ||  dependencyProperty == FrameworkContentElement.DataContextProperty)
|| (DesignerProperties.GetIsInDesignMode(dependencyObject)&&
 dataContextProp.Name.Equals("RuntimeDataContext") )))
{

}

其中dependencyProperty 和dependencyObject 是以某种方式获得的引用,

并且dependencyProperty 是在dependencyObject 引用的上下文中获得的。

于 2014-12-09T09:49:59.673 回答