2011-05-20 125 views
1

我有一个页面有三个子UserControls。我在父页面中设置了DataContext viewmodel资源,并且三个子控件引用父级DataContext,因为所有3个子控件都使用相同的ViewModel。都好。Xaml无法找到绑定

但是,其中一个UserControl存在绑定问题(我可以看到这是因为Silverlight 5 Beta中的新XAML调试功能。)所讨论的UserControl是ItemsControl。每个项目内有一个按钮和2个文本框。该按钮绑定到一个命令。错误是Button找不到它的绑定。 2个文本框绑定正确。 ItemsControl的ItemSource绑定到视图模型中的ObservableCollection。我怎么能告诉Button寻找它的绑定“在一个更高的层次”比Observable Collection ie:转到视图模型,而不是你的直接父(Observable Collection)。您无法为ChildControl中的按钮设置DataContext,因为对视图模型的引用不存在。它在父母身上。

+0

您提到了Silverlight 5,但是您已经标记了您定位的Silverlight 4,它在这种情况下有所不同。 – AnthonyWJones 2011-05-21 12:25:09

回答

0

您应该能够使用的RelativeSource绑定到你的ViewModel

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}, 
     Path=DataContext.MyButtonCommand} 
+0

OK - 试过了,XAML在AncestorType = {x:Type ItemsControl}上显示名称空间错误,表示x:Type上缺少组件引用。你知道那是什么装配吗? – Greg 2011-05-20 16:33:47

+0

根据我的页面中已经引用的PresentationFramework.dll中的文档:xmlns =“http://schemas.microsoft.com/winfx/2006/xaml/presentation” – Greg 2011-05-20 16:41:21

+0

完整的错误是:(1)属性“AncestorType”不存在于XML名称空间'http://schemas.microsoft.com/winfx/2006/xaml/presentation'(2)中的'RelativeSource'类型上'property type'AncestorType'not found in type' RelativeSource'(3)未找到类型'x:Type'。验证您是否缺少程序集引用,并且所有引用的程序集都已构建。 – Greg 2011-05-20 16:46:46

1

试试这个: -

给您ItemsControl的一个名字。在您的按钮绑定中包含ElementName=NameOfItemsControl,以DataContext.作为绑定路径的前缀。

0

我已经将我所有的SL5项目移回SL4。 SL5的新XAML调试功能不超过几天,并且现在永久残废,导致无法找到PDB的错误。我会建议任何开发大型项目的人远离SL5,直到经过测试和证明,否则你最终会浪费大量时间来分析SL5产生的奇怪错误。