簡體   English   中英

使用RelativeSource和AncestorType進行WPF數據綁定

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM