我正在为lightswitch创建一个usercontrol。这基本上是一个Silverlight用户控件,它接收“DataContext”属性上的businessObject。
我可以在xaml端项中绑定没有问题,但是在后面的代码中,我不知道如何在dataContext发生变化时获得通知?
我需要一个特殊的绑定。
非常感谢!
答案 0 :(得分:7)
您可以扩展控件类(在您的情况下为UserControl
)并添加新的DependencyProperty
包裹DataContext
以展示PropertyChanged
。请参阅these three posts和this 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);
由于