用户控制按钮绑定不响应主视图模型上的中继命令

本文关键字:命令 模型 主视图 控制 按钮 绑定 不响应 用户 | 更新日期: 2023-09-27 18:35:25

我有一个绑定到其主视图模型的 MainWindow。 在主窗口中,我有一个这样的用户控件

<vm:StatPanel DockPanel.Dock="Right" DataContext="{Binding Source={StaticResource viewModel}}" Loaded="StatPanel_Loaded" />

在该用户控件中,我有一个带有按钮的数据网格。目标是在单击按钮以更改主窗口 xaml 上的数据网格时。这是我的用户控件数据网格的样子

<Button Content="{Binding Path=sector}" Command="{Binding Path=filterGridCommand}"></Button>

当我运行应用程序时,出现以下错误。

System.Windows.Data Error: 40 : BindingExpression path error: 'filterGridCommand' property not found on 'object' ''mdSectorDetail' (HashCode=42410114)'. BindingExpression:Path=filterGridCommand; DataItem='mdSectorDetail' (HashCode=42410114); target element is 'Button' (Name=''); target property is 'Command' (type 'ICommand')

我正在使用位于主视图模型中的命令中继。我的问题是我不知道如何引用该主视图模型,我已经尝试了几种建议的解决方案,如下所示

CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type }}}"

请任何建议都会有所帮助。谢谢。

用户控制按钮绑定不响应主视图模型上的中继命令

您可以使用 snoop 来找出 Button 的 DataContext 是什么。我认为在你的情况下是错误的数据上下文。如果你给我用户控制的所有代码,我会给你写一个适当的数据竞标。

我为这些事情使用空的"标记"接口。

public interface IMyCommandDataContextHelper {}

具有我想通过相对源访问的数据上下文的控件/窗口必须实现空接口。

 public partial class MainWindow : IMyCommandDataContextHelper 

然后我可以轻松地使用相对源代码编写我的 XAML

{Binding Path=DataContext.filterGridCommand, RelativeSource={RelativeSource AncestorType={x:Type local:IMyCommandDataContextHelper}}}

ps:属性应该是帕斯卡大小写:)

public ICommand FilterGridCommand {get{...}}