<MyControls:SomeControl DataContext="{Binding}" />
在此文件的代码隐藏中,如何访问此datacontext? this.DataContext等于null.
编辑(更多信息):
我正在为现有的silverlight应用程序构建扩展.我与应用程序集成的观点如下:
<DataTemplate x:Key="AnimportantIDentifIErUsedByTheHostApp"> <MyControls:SomeControl DataContext="{Binding}" /></DataTemplate>
在我的控制范围内,我能够绑定这样的属性:
<Hyperlink NavigateUri="{Binding Path=UriWithSlug}">
这一切都很好.但是对于某些功能(具体来说,我需要使用Webbrowser控件和NavigatetoString()方法),我需要从DataContext访问属性.
基本上在代码隐藏中,我需要做一些事情来影响:
myWebbrowser.NavigatetoString(DataContext.MyHTMLStringProperty);解决方法 您不需要DataContext = {Binding},因为这相当于DataContext = DataContext.
但是你缺少的是类型信息.绑定使用反射来解析属性路径,但是在代码隐藏中,您需要知道DataContext返回的对象的类型.
如果你能确定那么它只会是: –
myWebbrowser.NavigatetoString(((MyType)DataContext).MyHTMLString);
如果您无法确定类型和/或您无法说服控制控件主机的任何人确保至少实现了与已知成员的特定接口,那么您可能需要自己求助于反射.
使用绑定系统为您进行反射
如果你不能只知道属性的类型,另一种选择: –
public string HTMLString{ get { return (string)GetValue(HTMLStringProperty); } set { SetValue(HTMLStringProperty,value); }}public static DependencyProperty HTMLStringPropery = DependencyProperty.Register( "HTMLString",typeof(string),typeof(SomeControl),null);
现在,如果您确定知道要绑定的属性的名称,可以在控件构造函数的代码中设置绑定: –
SetBinding(HTMLStringProperty,new Binding("MyHTMLString"));
有了这个,您的代码将如下所示: –
myWebbrowser.NavigatetoString(HTMLString);
或者,您可以将控件的这个新属性绑定到Xaml的责任: –
<DataTemplate x:Key="AnimportantIDentifIErUsedByTheHostApp"> <MyControls:SomeControl HTMLString="{Binding MyHTMLString}" /> </DataTemplate>总结
以上是内存溢出为你收集整理的如何在代码隐藏中访问silverlight控件的datacontext全部内容,希望文章能够帮你解决如何在代码隐藏中访问silverlight控件的datacontext所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)