我有一个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 }}}"
请提出任何建议。谢谢。
答案 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{...}}