附加属性:检查绑定

本文关键字:检查 绑定 属性 | 更新日期: 2023-09-27 18:06:37

短问题

是否有一种快速的方法知道一个特定的附加属性绑定到,在运行时?

细节

我正在调试一个UserControl(继承了ItemsControl),它将Canvas.LeftCanvas.Top的项目绑定到ViewModel对象的两个属性,通过样式。在运行时,我在某个位置放置了一个断点,并希望检查Canvas.Left附加属性的绑定。

请注意,我不想看到项的附加属性的当前值。我可以通过在QuickWatch或Immediate窗口中检查Canvas.GetLeft(myItem)的值来轻松地做到这一点。我想检查这里的实际绑定,即这个附加属性绑定到myItem的VM属性名称。

我已经尝试过Snoop了,不幸的是它不显示附加属性的绑定(如果我没有错过一些明显的东西的话)。

附加属性:检查绑定

是否有一种快速的方法可以在运行时知道特定的附加属性绑定到什么

是的,只需重写附加的属性某处(在您的窗口?):

<Window x:Class="WpfApplication1.MainWindow" ... >
    <Grid Canvas.Top="123"/>
</Window>

和代码

public MainWindow()
{
    InitializeComponent();
    Canvas.TopProperty.OverrideMetadata(typeof(MainWindow), new FrameworkPropertyMetadata((d, e) =>
    {
        // you will get here for each Canvas.Top set in MainWindow
        MessageBox.Show(d.ToString());
    }));
}

您可以通过编程方式获得附加的属性绑定,就像获得普通依赖项属性绑定一样。例如,从代码后面获取控件的Canvas.LeftProperty附加属性绑定,名称为myItemsControl:

BindingExpression bindingExpression = myItemsControl.GetBindingExpression(Canvas.LeftProperty);
Binding parentBinding = bindingExpression.ParentBinding;