gpt4 book ai didi

wpf - 上下文菜单绑定(bind)到父窗口的 Datacontext

转载 作者:行者123 更新时间:2023-12-04 23:49:24 24 4
gpt4 key购买 nike

我有一个 TreeListControl 绑定(bind)到我的 VM 中的集合。我还想在 treelistcontrol 中定义上下文菜单,使其标题文本绑定(bind)到我的 VM 中的另一个字符串。在这种情况下如何设置数据上下文?我试过了

<Window.DataContext>
<model:ViewModel></model:ViewModel>
</Window.DataContext>
<Grid>
<Button Grid.Row="1" Command="{Binding CellCheckedCommand}"></Button>

<TextBlock Text="{Binding HeaderText}" Grid.Row="2">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=DataContext}" Header="{Binding HeaderText}"></MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</Grid>

但它不起作用。

这是 View 模型
public DelegateCommand CellCheckedCommand { get; set; }

private String _HeaderText;

public String HeaderText
{
get
{
return _HeaderText;
}
set
{
_HeaderText = value;
NotifyPropertyChanged("HeaderText");
}
}

public void NotifyPropertyChanged(String name)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}

private void CellCheckedMethod()
{
HeaderText = "Changed";
}

最佳答案

为您的窗口提供一个名称并显式绑定(bind)到它,例如

<window  x:Name="ReportsPage"/>

...

<MenuItem DataContext="{Binding ElementName=ReportsPage}"/>

更新

由于上下文菜单实际上在它自己的窗口中,因此绑定(bind)有点棘手。因此最好的选择是走上 RelativeSource。到上下文的父级并从那里拉出标题文本:
    <Window.DataContext>
<local:MainVM HeaderText="Jabberwocky" />
</Window.DataContext>

...

<TextBlock Text="{Binding HeaderText}">
<TextBlock.ContextMenu>
<ContextMenu>

<MenuItem Header="{Binding Path=Parent.DataContext.HeaderText,
RelativeSource={RelativeSource Self}}" />

</ContextMenu>
</TextBlock.ContextMenu>

在这种情况下会产生这个

enter image description here

关于wpf - 上下文菜单绑定(bind)到父窗口的 Datacontext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26359091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com