我正在尝试使用以下代码设置控件的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]}" />
答案 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
。它是一个依赖属性的事实告诉你它是如何存储的,而不是它存储在其中的数据的类型。