Eu tenho um MainWindow vinculado ao seu mainViewModel. dentro da MainWindow eu tenho um usercontrol defind como este
<vm:StatPanel DockPanel.Dock="Right" DataContext="{Binding Source={StaticResource viewModel}}" Loaded="StatPanel_Loaded" />
dentro desse usercontrol eu tenho um datagrid com botões. O objetivo é quando os botões são clicados para alterar uma grade de dados no xaml da MainWindow. é assim que meu datagrid de controle de usuário se parece
<Button Content="{Binding Path=sector}" Command="{Binding Path=filterGridCommand}"></Button>
quando executo o aplicativo, recebo o seguinte erro.
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")
Eu estou usando uma retransmissão de comando que está localizada no MainViewModel. Meu problema é que não sei como referenciar esse mainViewModel, tentei várias das soluções sugeridas, como a seguinte
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type }}}"
Por favor, todas as sugestões serão úteis. Obrigado.
Respostas:
1 para resposta № 1Você pode usar bisbilhotar para descobrir qual é o seu DataContext de Button. Eu acho que no seu caso está errado DataContext. Se você me der todo o código do UserControl, escreverei um lance de dados adequado.
0 para resposta № 2
Eu uso uma interface "marcador" vazia para essas coisas.
public interface IMyCommandDataContextHelper {}
o controle / janela que possui o datacontext que eu quero alcançar com a fonte relativa precisa implementar a interface vazia.
public partial class MainWindow : IMyCommandDataContextHelper
então eu posso facilmente escrever meu xaml com fonte relativa
{Binding Path=DataContext.filterGridCommand, RelativeSource={RelativeSource AncestorType={x:Type local:IMyCommandDataContextHelper}}}
ps: As propriedades devem ser PascalCase :)
public ICommand FilterGridCommand {get{...}}