2011-06-19 138 views
4

我有一個綁定到ViewModel的UserControl。 UserControl綁定到項目列表(類對象)。因此,當我想要將各種元素綁定到DataGrid的RowDetails模板上的屬性時,我使用:wpf:祖先的FindAncestor

"{Binding RelativeSource={RelativeSource FindAncestor, 
          AncestorType={x:Type UserControl}}, 
       Path=DataContext.SomeProperty}" 

這可以正常工作。現在我想將RowDetails的內容分解到一個UserControl,我可以在其他頂級UserControls中使用DataGrid。那麼,如何找到一個UserControl,它是寫入此綁定語句的UserControl的祖先?

我無法在x:Type聲明中指定頂級UserControl的名稱,因爲它每次都不相同。

回答

4

你可以用AncestorLevel做到這一點,但我嚴重懷疑這是綁定的正確方法。

您將擁有一個UserControl,它的工作取決於其在邏輯樹中的位置。

如果你在其中插入一些其他的usercontrol,它將停止工作。

正確的綁定方式是使用提供給控件的Datacontext。

如果缺少一些數據而不是修改該數據環境來獲取數據,即使這意味着要從其父級的數據上下文中讀取該數據。

3

看看AncestorLevel

"{Binding RelativeSource={RelativeSource FindAncestor, 
             AncestorType={x:Type UserControl}, 
             AncestorLevel=2}, 
      Path=DataContext.SomeProperty}"