知道何时在UserControl后面的代码中更改“Datacontext”

时间:2011-11-29 14:05:45

标签: c# wpf silverlight xaml user-controls

我正在为lightswitch创建一个usercontrol。这基本上是一个Silverlight用户控件,它接收“DataContext”属性上的businessObject。

我可以在xaml端项中绑定没有问题,但是在后面的代码中,我不知道如何在dataContext发生变化时获得通知?

我需要一个特殊的绑定。

非常感谢!

2 个答案:

答案 0 :(得分:7)

您可以扩展控件类(在您的情况下为UserControl)并添加新的DependencyProperty包裹DataContext以展示PropertyChanged。请参阅these three poststhis question。或者,您可能根本不需要收听DataContextChanged,这取决于您尝试执行的操作,因为处理模型中的更改可能更合适。

最后,如果你有耐心和选择,我听说SL 5公开了DataContextChanged

答案 1 :(得分:2)

我担心你不能再次设置静态只读字段,除非你用“new”这样做。

您可能能够捕获通过数据绑定更改为DataContext依赖项属性的DataContext。 例如注册一个名为“MyDataContext”的新dp,并创建一个Binding DataContext是绑定源,MyDataContext是绑定目标,即DataContext ---> MyDataContext。所以每次DataContext都会让你的MyDataContext dp改变回调。我认为这会起作用,但没有经过测试。

代码如下:

// dp declaration..
public static readonly DependencyProperty MyDataContextProperty = DependencyProperty.Register(null, "MyDataContext", typeof(object), typeof(MyControl), new PropertyMetadata(MyDataContextChangedCallback));


// create binding in constructor or initialization.
Binding binding = new Binding("DataContext");
BindingOperations.SetBinding(this, MyDataContextProperty, binding);

由于