【问题标题】:Xaml can't find bindingXaml 找不到绑定
【发布时间】:2011-05-20 16:21:12
【问题描述】:

我有一个包含三个子用户控件的页面。我在父 Page 中设置了 DataContext 视图模型资源,三个子控件引用了父 DataContext,因为所有 3 个子用户控件都使用相同的 ViewModel。都很好。

但是,其中一个 UserControl 存在绑定问题(我可以看到这是因为 Silverlight 5 Beta 中的新 XAML 调试功能。)有问题的 UserControl 是 ItemsControl。每个项目内有一个按钮和 2 个文本框。该按钮绑定到命令。错误是 Button 找不到它的绑定。 2个文本框正确绑定。 ItemsControl 的 ItemSource 绑定到 viewmodel 中的 ObservableCollection。

我的问题是:如何告诉 Button 在“更高级别”上查找其绑定,而不是 Observable Collection,即:转到视图模型,而不是您的直接父级(Observable Collection)。您不能为ChildControl 中的按钮设置DataContext,因为对视图模型的引用不存在。它在父级中。

【问题讨论】:

  • 您提到了 Silverlight 5,但您已经标记了您的目标 Silverlight 4,这在这种情况下会有所不同。

标签: silverlight silverlight-4.0 mvvm


【解决方案1】:

试试这个:-

为您的 ItemsControl 命名。在您的按钮绑定中包含ElementName=NameOfItemsControl,在绑定路径前加上DataContext.

【讨论】:

    【解决方案2】:

    您应该能够使用 RelativeSource 绑定来访问您的视图模型

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

    【讨论】:

    • OK - 试过了,XAML 在 AncestorType={x:Type ItemsControl} 上显示命名空间错误,表示 x:Type 上缺少程序集引用。你知道那是什么程序集吗?
    • 根据我的页面中已经引用的 PresentationFramework.dll 中的文档:xmlns="schemas.microsoft.com/winfx/2006/xaml/presentation"
    • 完整的错误是:(1)XML命名空间'schemas.microsoft.com/winfx/2006/xaml/presentation'(2)The属性'AncestorType'在类型'RelativeSource'中找不到类型'RelativeSource'上的属性'AncestorType' (3) 未找到类型“x:Type”。确认您没有丢失程序集引用并且所有引用的程序集都已构建。
    • 刚刚转而在我的项目中使用 Silverlight 5 框架,现在语法看起来很不错,尽管我无法测试,因为我的所有超链接和按钮现在都被禁用了!!!
    【解决方案3】:

    此后,我已将所有 SL5 项目移回 SL4。 SL5 的新 XAML 调试功能只运行了几天,现在由于无法找到 PDB 的错误而永久瘫痪。我建议任何开发大型项目的人在经过测试和验证之前远离 SL5,否则你最终会浪费大量时间来分析 SL5 产生的奇怪错误。

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 1970-01-01
      • 2017-02-28
      • 2012-11-13
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多