我有一个问题,我需要知道我的对象的依赖属性的所有绑定。目前,每当我的datacontext发生变化时,我都会遍历依赖属性,并寻找绑定表达式。但我发现在某些情况下(TabControls),数据上下文似乎是先设置的,然后才应用来自XAML的绑定。
那么,有没有一种方法可以检测到绑定应用于我的某个依赖属性?
发布于 2012-06-26 21:11:02
假设您在一个UserControl中,您应该能够使用Loaded事件来完成此操作。该事件在“元素已布局、呈现并准备好交互”时触发。我只能假设这意味着绑定已经完成。
然后,您可以在Loaded事件处理程序中告诉您的datacontext您正在绑定到它。
如果您希望datacontext发生变化,则还需要将其与DataContextChanged事件处理程序结合使用。
发布于 2012-06-26 16:35:31
我假设yr使用私有的静态DataContextChanged事件来知道什么时候yr的数据上下文发生了正确的变化
这是我的一些代码,这是我要做的
public static readonly DependencyProperty ApplicationDataContextProperty =
DependencyProperty.Register("ApplicationDataContext",
typeof(Object),
typeof(MyControl),
new PropertyMetadata(MyControl_DataContextChanged));
// my constructor
public MyControl()
{
InitializeComponent();
if (!DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{
SetBinding(ApplicationDataContextProperty, new Binding());
}
}
// my event
private static void MyControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
MyControl thisControl = sender as MyControl
if (thisControl != null)
{
INotifyPropertyChanged propertyChanged;
propertyChanged = e.OldValue as INotifyPropertyChanged;
if (propertyChanged != null)
propertyChanged.PropertyChanged -= thisControl.propertyChanged_PropertyChanged;
propertyChanged = e.NewValue as INotifyPropertyChanged;
if (propertyChanged != null)
propertyChanged.PropertyChanged += thisControl.propertyChanged_PropertyChanged;
}
}
// my 2e event
void propertyChanged_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "ListWithUsers")
LoadGrid();
}发布于 2012-06-26 21:11:14
尝试在关键绑定上使用NotifyOnSourceUpdated
http://msdn.microsoft.com/en-us/library/system.windows.data.binding.notifyonsourceupdated.aspx
或者,也可以使用PresentationTraceSources在输出窗口中获取详细的绑定信息
例如
<TextBlock Text="{Binding Name, PresentationTraceSources.TraceLevel=High}" />https://stackoverflow.com/questions/11203324
复制相似问题