知道什么时候“数据上下文”是在UserControl后面的代码中更改的

本文关键字:代码 UserControl 是在 什么时候 数据 上下文 数据上下文 | 更新日期: 2023-09-27 18:16:10

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

我可以绑定在xaml侧项没有问题,但在后面的代码,我不知道如何得到通知时,dataContext已经改变?

我需要一个特殊的绑定。

非常感谢!

知道什么时候“数据上下文”是在UserControl后面的代码中更改的

您可以扩展控制类(在您的情况下是UserControl)并添加新的DependencyProperty包装DataContext以暴露PropertyChanged。看看这三篇文章和这个问题。或者,根据您要做的事情,您可能真的不需要听DataContextChanged,因为它可能更适合处理模型中的更改。

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

恐怕你不能再次设置静态只读字段,除非你使用"new"。

您可能能够捕获通过数据绑定到DataContext依赖属性更改的DataContext。例如,注册一个新的dp名为"MyDataContext",并创建一个绑定。
DataContext是绑定源,MyDataContext是绑定目标,即DataContext -> MyDataContext。每次DataContext你都会得到MyDataContext dp changed callback。我认为这将工作,但没有测试。

代码如下:

// 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);

谢谢