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

时间:2011-01-04 16:10:03

标签: silverlight user-controls datacontext

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

我很确定ViewModel对象会冒泡到我的UserControl但是我怎么能在UserControl中确保DataContext的类型为PatternCreatorViewModel?

希望这是可以理解的!

1 个答案:

答案 0 :(得分:5)

这是(在我孤独的观点中)Silverlight和WPF中数据绑定模型的最大限制之一,即在此过程中的任何地方都没有类型安全。只要你输入{Binding ...},你就会在没有网络的情况下工作。 MS设法采用了一种非常光荣的强类型语言,如C#,并将其与一个完全非类型安全的数据绑定模型联系起来,从而破坏了Anders Hejlsberg十年来对C#的精彩工作。在使用动态语言时,您会期望这种“松散”,但在处理C#时则不然。

当您更改View的ViewModel时,这个限制确实会成为问题,因为当然,没有简单的方法来测试您的数据绑定。通常情况下,当你有无法测试的代码时,你至少可以依靠编译器来告诉你,你要求代码做什么是没有任何意义的。但是因为MS使数据绑定非类型安全,不仅你不能测试你的更改,你甚至不能依赖编译器告诉你什么时候没有任何意义。并且,为了增加对伤害的侮辱,您甚至不能依赖于运行应用程序并查看是否收到任何错误消息:因为绑定总是无声地失败。您可以做的最好的事情是打开日志记录级别并遍历大量的调试错误消息。 Uggh。讨厌地狱。

请参阅我的博文here,我提出的另一个问题here,以及我对here的回答,以了解有关基本问题的更多想法。

我应该注意到,在我看来,我似乎几乎是孤身一人,所以也许有一些巨大的东西,我只是错过了。但是我个人认为你已经敲了敲门。