gpt4 book ai didi

wpf - Command 和 CommandParameter 的不同数据上下文

转载 作者:行者123 更新时间:2023-12-04 05:39:29 26 4
gpt4 key购买 nike

是否可以有不同的 Datacontext对于 WPF Command和一个 CommandParameter ?

<UserControl>
<UserControl.Resources>
<viewmodels:ListViewGridBaseViewModel x:Key="vm" />
</UserControl.Resources>
<Grid>
<ContentControl x:Name="currentContent"
Content="{Binding Path=ListGrid}" >
<ContentControl.ContextMenu>
<ContextMenu >
<MenuItem Command="{Binding Path=Save}"
CommandParameter="{Binding ElementName=currentContent}"
DataContext="{StaticResource ResourceKey=vm}"
Header="Save">
<MenuItem.Icon>
<Image Source="{StaticResource ResourceKey=Save}"
Height="16"
Width="16"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Command="{Binding Path=Revert}"
DataContext="{StaticResource ResourceKey=vm}"
Header="Revert">
<MenuItem.Icon>
<Image Source="{StaticResource ResourceKey=Revert}"
Height="16"
Width="16"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</ContentControl.ContextMenu>
</ContentControl>
</Grid>
</UserControl>

我想要 Binding对于 ListGrid 冒泡到另一个 Viewmodel 和 Command到本地 ViewModel。但是 CommandParameter应该是 ContentControl .
LOG 说:
System.Windows.Data Error: 4 : Cannot find source for binding with 
reference 'ElementName=currentContent'. BindingExpression:(no path);
DataItem=null; target element is 'MenuItem' (Name='');
target property is 'CommandParameter' (type 'Object')

最佳答案

ContextMenu打破 DataContext继承链,这就是为什么ElementName=currentContent找不到。

在这里寻找 artificial inheritance context并使用类 DataContextSpy
然后执行以下操作:

<UserControl>
<UserControl.Resources>
<viewmodels:ListViewGridBaseViewModel x:Key="vm" />
<local:DataContextSpy DataContext="{Binding ElementName=currentContent}" x:Key="Spy">
</UserControl.Resources>
<Grid>
<ContentControl x:Name="currentContent"
Content="{Binding Path=ListGrid}" >
<ContentControl.ContextMenu>
<ContextMenu >
<MenuItem Command="{Binding Path=Save}"
CommandParameter="{Binding DataContext,Source={StaticResource Spy}}"
DataContext="{StaticResource ResourceKey=vm}"
Header="Save">
<MenuItem.Icon>
<Image Source="{StaticResource ResourceKey=Save}"
Height="16"
Width="16"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Command="{Binding Path=Revert}"
DataContext="{StaticResource ResourceKey=vm}"
Header="Revert">
<MenuItem.Icon>
<Image Source="{StaticResource ResourceKey=Revert}"
Height="16"
Width="16"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</ContentControl.ContextMenu>
</ContentControl>
</Grid>
</UserControl>

关于wpf - Command 和 CommandParameter 的不同数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11447343/

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