Silverlight 以类型安全的方式将DataContext共享给UserControl

Silverlight 以类型安全的方式将DataContext共享给UserControl,silverlight,user-controls,datacontext,Silverlight,User Controls,Datacontext,我正在开发我的第一个Silverlight 4应用程序,正在努力研究如何以类型安全的方式将MainPage.xaml中顶部元素(网格)上的DataContext集共享到底层用户控件中。DataContext是我的ViewModel类的一个实例,我的想法是能够将UserControl中的某些元素绑定到ViewModel的属性 我很确定ViewModel对象是由我的UserControl产生的,但是我如何在UserControl中确定DataContext是PatternCreatorViewMod

我正在开发我的第一个Silverlight 4应用程序,正在努力研究如何以类型安全的方式将MainPage.xaml中顶部元素(网格)上的DataContext集共享到底层用户控件中。DataContext是我的ViewModel类的一个实例,我的想法是能够将UserControl中的某些元素绑定到ViewModel的属性

我很确定ViewModel对象是由我的UserControl产生的,但是我如何在UserControl中确定DataContext是PatternCreatorViewModel类型呢

希望这是可以理解的

这是Silverlight和WPF中数据绑定模型的最大限制之一(我个人认为),即过程中没有任何类型安全性。只要你输入{Binding…},你就可以在没有网络的情况下工作了。MS成功地采用了一种非常出色的强类型语言,如C#,并将其与完全非类型安全的数据绑定模型绑定在一起,从而几乎毁掉了Anders Hejlsberg十年来在C#上的出色工作。在使用动态语言时,您可能会遇到这种“松散”,但在处理C#时则不会

当您更改视图底层的ViewModel时,此限制确实会出现问题,因为当然,没有简单的方法来测试数据绑定。通常,当您有无法测试的代码时,您至少可以依靠编译器来告诉您,您要求代码执行的操作是否有任何意义。但是由于MS使数据绑定非类型安全,您不仅不能测试更改,甚至不能依靠编译器来告诉您更改什么时候没有意义。而且,雪上加霜的是,您甚至不能依赖于运行应用程序并查看是否收到任何错误消息:因为绑定总是无声地失败。您所能做的最好的事情就是提高日志记录级别,浏览大量的调试错误消息。啊。糟透了

请参阅我的博客帖子、我提出的另一个问题以及我的回答,以了解更多关于潜在问题的想法


我应该注意到,对于这一点,我几乎是孤零零的,所以也许我遗漏了一些重要的东西。但我个人认为你已经一针见血。

你为什么要这么做?仔细考虑这个问题的答案。我想知道类型安全的API和Xaml语法是什么样子的?我已经考虑过了,但显然还不够:-)。我怀疑它会有点像C#泛型。当您在XAML中声明您的对象时,您将指定它希望绑定到的类型,即。如果不想进行类型检查,只需将该属性留空,但如果指定,则会检查分配给数据上下文的任何对象,以确保它们是该类型的实例,您指定的任何数据绑定都将被检查,以确认它们可以与该类型一起工作。您不是唯一一个这样做的人:以前版本的Entity Framework include Path也是如此——至少在最新版本中已经修复了这一点。所以希望有一天WPF中的绑定也会更好。。。(顺便说一句,绑定当然是类型保存,您不能定义DataContext的类型,必须使用自定义DependencyProperties)