问题描述
|
我正在尝试使用以下代码设置控件的datacontext:
public object GlobalContext
{
set { this.SetValue(global.DataContext as DependencyProperty,value); }
}
全局是控件,在此情况下是堆栈面板。
当我将鼠标悬停在ѭ1上时,它表示其依赖项属性,因此我认为它应该可以工作,但是出现以下错误:
无法在类型为'ResourceModuleAccessView \'的\'GlobalContext \'属性上设置\'Binding \'。只能在DependencyObject的DependencyProperty上设置\'Binding \'。
有什么办法可以使我工作?
编辑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]}\" />
解决方法
如果要将GlobalContext类用作绑定目标或使用SetValue方法,则必须从DependencyObject中继承它。另外,您应该将静态数据上下文* Property *从ѭ4传递给setValue,这就是实际的dependecy属性对象,您要两次传递datacontext对象。换句话说,呼叫应该是
SetValue(FrameworkElement.DataContextProperty,value);
我怀疑除了此代码还有其他问题,您可以发布您的xaml吗?
-编辑-
感谢您添加代码,因为您要绑定到类(您的类是绑定目标,而不是绑定源),因此必须将其设为DependecyObject,并将“ 6”设为DependecyProperty。
另请注意,当绑定系统设置Dependecy属性时,它不使用常规的clr属性,而是直接使用DependencyProperty对象。这意味着,如果要在属性更改时注册回叫,则必须在创建DependecyProperty时在对Register的调用中执行此操作
,在ѭ4上定义的DataContext属性是依赖项属性,即,它是WPF依赖项属性框架“支持”的属性。但是,此属性的类型为object
。它是依赖项属性的事实告诉您它的存储方式,而不是其中存储的数据类型。