我有一个有三个子UserControls的页面 . 我在父页面中设置了DataContext viewmodel资源,并且三个子控件引用了父DataContext,因为所有3个子用户控件都使用相同的ViewModel . 都好 .
但是,其中一个UserControl存在绑定问题(我可以看到这是因为Silverlight 5 Beta中新的XAML调试功能 . )有问题的UserControl是一个ItemsControl . 每个项目内部都有一个按钮和2个文本框 . 该按钮绑定到Command . 错误是Button无法找到其绑定 . 2个文本框正确绑定 . ItemsControl的ItemSource绑定到viewmodel中的ObservableCollection .
我的问题是:如何告诉Button查找其绑定"at a higher level"而不是Observable Collection ie:转到视图模型,而不是直接父级(Observable Collection) . 您无法在 ChildControl
中为按钮设置 DataContext
,因为对视图模型的引用不存在 . 它在父母身上 .
3 回答
试试这个:-
为ItemsControl命名 . 在您的按钮绑定包括
ElementName=NameOfItemsControl
中,使用DataContext.
作为绑定路径的前缀 .您应该能够使用RelativeSource绑定来访问您的viewmodel
此后我将所有SL5项目都移回SL4 . SL5的新XAML调试功能工作时间不超过几天,现在已经永久性地削弱了无法找到PDB的错误 . 我建议任何开发大型项目的人都要远离SL5,直到经过测试和验证,否则你最终会浪费大量的时间来分析SL5产生的奇怪错误 .