Silverlight行为:AssociatedObject的DataContext更改

时间:2011-02-04 12:11:45

标签: silverlight silverlight-4.0 datacontext dependency-properties behavior

我编写了一个Interactivity Behavior(来自Blend SDK),可以附加到DataGrid,并根据DataGrid的DataContext中的ViewModel对DataGrid的列进行一些魔术。
由于DataContext可以在以后设置,我必须在行为中监听DataContext的变化。所以,我已经将DependencyProperty绑定到Associated DataGrid的DataContext,如下所示:

 BindingOperations.SetBinding(this, SourceProperty, new Binding("DataContext") { Source = AssociatedObject });

此行被命中,因此绑定确实发生了。

现在棘手的部分: 如果我打电话

datagrid.DataContext = new MyViewModel();

一切都很完美。但是,如果datagrid包含在某些UserControl中(不一定是它的直接子节点)并且我想调用

this.DataContext = new MyViewModel();

Source属性的回调不会触发。我对它进行了调试,设置了datagrid.DataContext,因此DataContext是通过可视化树继承的,如果我手动调用行为更新,它确实会看到DataContext,但没有任何事情自动发生。
我不想命名DataGrid实例,我不想命名行为,因为在一个UserControl中可以有任意数量的那些,我想设置UserControl的DataContext并让DependencyProperty系统发挥其魔力。 / p>

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你有没有尝试过更简单的东西: -

  BindingOperations.SetBinding(this, SourceProperty, new Binding());

这应该为您提供DataContext对象。没有Path的绑定将返回源对象。没有明确Source的绑定会返回当前DataContext

问题是DataContext的{​​{1}}(行为)是否从其附加的this获取其值?我认为可能会这样。