我需要在ContentControl中重写DataContextProperty的元数据,以关联PropertyChangedCallback。
我知道这仅在静态构造函数中允许,但PropertyChangedCallback不能是静态函数。 有没有更好的方法可以做到这一点?
静态构造函数:
static ListAndDetailsControl() {
DataContextProperty.OverrideMetadata(typeof(ListAndDetailsControl), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnDataContextChanged)));
}
应在属性上调用的函数已更改:
private void OnDataContextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {}
答案 0 :(得分:1)
OverrideMetadata
在静态构造函数中必须不是必需的(但应该在其中)。你可以把它例如在Button.Click
事件处理程序中。
PropertyChangedCallback不能是静态函数
错了。 PropertyChangedCallback可以是静态函数。
问题在于,如果有人已经注册/覆盖了该属性的元数据,那么您将获得一个例外。
请参见MSDN:
此外,每种类型的元数据只能被覆盖一次。后续的 尝试覆盖相同类型的元数据将引发
要跟踪DataContext的更改,只需使用适当的事件ContentControl.DataContextChanged
。
<ContentControl DataContextChanged="OnDataContextChanged">
为避免代码落后,请使用行为处理DataContextChanged
。