【问题标题】:WinRT (Win 8) Store App XAML Bindings RelativeSourceMode FindAncestor missing?WinRT (Win 8) Store App XAML Bindings RelativeSourceMode FindAncestor 丢失?
【发布时间】:2013-02-19 09:04:28
【问题描述】:

有人知道 FindAncestor 在 XAML 绑定中的“新方式”是什么吗?查看 RelativeSourceMode (http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.relativesourcemode),只剩下引用 self 或 TemplatedParent 的选项。 FindAncestor 不见了。我想知道我使用 FindAncestor 修复的问题的原因和典型解决方案是什么。

最好的问候 戈佩

【问题讨论】:

  • 同意,这很糟糕。

标签: data-binding winrt-xaml


【解决方案1】:

为什么不见了?不知道,但我怀疑除了“微软没有足够的时间及时实现所有功能”之外的解释。

一个简单的解决方法是改用 ElementName,如下所示:

Binding={ ElementName=TheNameOfTheAncesor, Path=DataContext.TheViewModelProperyIWantToBindTo }

并为您希望 FindAncestor 绑定指向的祖先添加 x:Name 属性:

<TextBlock x:Name="TheNameOfTheAncestor" />

【讨论】:

  • 是的,它丢失了...... :) ElementName 在简单的场景中有效,但如果在 ControlTemplate 中则不能,因为每个模板化控件的 ElementName 都不同。
  • 这是我两天内第三次出现“微软没有足够的时间来实现所有功能”的问题。谢谢先生,对我来说效果很好。
  • 如果这是 XAML,我认为应该是 {Binding ElementName=...} 而不是 Binding={ Elementname=...}
【解决方案2】:

没有针对这种缺乏 afaik 的通用解决方案,例如,您无法访问 DataTemplate 中的 ListViewItem 属性,因此您无法优雅地对选择更改做出反应。在添加FindAncestor 之前,您应该为每个特定情况找到解决方法(我不敢相信这种缺席不仅仅是因为时间不够)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多