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