设置datacontext依赖项属性

时间:2011-05-23 09:13:26

标签: wpf binding

我正在尝试使用以下代码设置控件的datacontext:

public object GlobalContext
{
    set { this.SetValue(global.DataContext as DependencyProperty , value);  }
}

global是一个控件,在本例中是一个stackpanel。

当我鼠标悬停在global.DataContext上时,它表示它是一个依赖属性,所以我认为它应该可以工作,但是我收到以下错误:

  

无法在“ResourceModuleAccessView”类型的“GlobalContext”属性上设置“绑定”。 '绑定'只能在DependencyObject的DependencyProperty上设置。

我能以任何方式完成这项工作吗?

编辑1: 在用户控件中我有:

 <StackPanel x:Name="global" Orientation="Horizontal">

并且在我尝试重用控件的地方:

    <my:ResourceModuleAccessView  

        ControlName="Usage Monitoring"
        GlobalContext="{Binding Path=moduleAccess.GlobalAccess[ResourceModule.UsageMonitoring]}"          
          GroupContext="{Binding Path=moduleAccess.Items[ResourceModule.UsageMonitoring]}" />

2 个答案:

答案 0 :(得分:2)

如果要将其用作绑定目标或使用SetValue方法,则GlobalContext类必须来自DependencyObject。此外,您应该将静态DataContext * Property *从FrameworkElement传递给setValue,即实际的dependecy属性对象,您将传递datacontext对象两次。换句话说,呼叫应该是

SetValue(FrameworkElement.DataContextProperty,value);

我怀疑除了这个代码还有其他问题,你能发布你的xaml吗?

-edit -

感谢您添加代码,因为您绑定了您的课程(您的课程是binding target as opposed to a binding source),您必须将其设为DependecyObject并制作GlobalContext DependecyProperty。

另请注意,当绑定系统设置dependecy属性时,它不使用常规clr属性,它直接使用DependencyProperty对象。这意味着如果您想要在更改属性时注册回调,则必须在创建DependecyProperty时调用Register时执行此操作

答案 1 :(得分:0)

FrameworkElement上定义的DataContext属性是依赖项属性,即它是由WPF依赖项属性框架“支持”的属性。但是,此属性的类型为object。它是一个依赖属性的事实告诉你它是如何存储的,而不是它存储在其中的数据的类型。