usercontrol按钮绑定未响应mainviewmodel上的relaycommand

时间:2012-05-24 15:22:27

标签: c# wpf mvvm relaycommand

我有一个MainWindow绑定到它的mainViewModel。在MainWindow中我有一个像这样的用户控件定义

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

在usercontrol里面我有一个带按钮的数据网格。目标是单击按钮以更改MainWindow xaml上的数据网格。这就是我的usercontrol数据网格看起来像

<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')

我正在使用位于MainViewModel中的命令中继。我的问题是我不知道如何引用mainViewModel,我已经尝试了几个建议的解决方案,如下所示

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

请提出任何建议。谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用snoop找出Button的DataContext是什么。我认为在你的情况下是错误的DataContext。如果你给我所有的UserControl代码,我会给你写一个正确的数据出价。

答案 1 :(得分:0)

我使用空的“标记”界面来处理这些事情。

public interface IMyCommandDataContextHelper {}

具有我想要通过相对源访问的datacontext的控件/窗口必须实现空接口。

 public partial class MainWindow : IMyCommandDataContextHelper 

然后我可以轻松地用相对来源编写我的xaml

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

ps:属性应该是PascalCase:)

public ICommand FilterGridCommand {get{...}}