[英]WPF Databinding with RelativeSource and AncestorType
我試圖讓一些綁定代碼工作。 基本上我想將網格上下文菜單元素的IsEnabled屬性與網格中選定行的值綁定。
我有這個工作:
<my:DataGrid.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}">
<MenuItem Header="Grant Access" IsEnabled="{Binding Connectable}"/>
</ContextMenu>
</my:DataGrid.ContextMenu>
但是我想這樣做而且它不起作用。 它沒有錯誤,但只是不禁用菜單項。 知道為什么嗎?
<my:DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Grant Access" IsEnabled="{Binding Path=SelectedItem.Connectable, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type my:DataGrid}}}"/>
</ContextMenu>
</my:DataGrid.ContextMenu>
嘗試使用ElementName binding
而不是Ancestor binding
。 ContextMenu
不是Grid的可視化樹的一部分。
- 編輯 -
啊,我錯了。 ElementName綁定(下面給出的示例)也不適用於ContextMenu。 它不是DataGrid可視化樹的一部分。 這就是為什么它無法看到DataGrid因此無法引用它。 您將不得不使用第一種方法。
你有什么理由不想這樣做嗎?
<DataGrid.ContextMenu>
<ContextMenu DataContext="{Binding SelectedItem, ElementName=DataGrid1}">
<MenuItem Header="Grant Access"
IsEnabled="{Binding Connectable}" />
</ContextMenu>
</DataGrid.ContextMenu>
如果在調試模式下查看Visual Studio中的輸出窗口,您將獲得綁定錯誤的詳細信息 - 這可能會對您的問題有所了解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.