Я работаю над приложением, которое использует MVVM, но у меня есть небольшая проблема. В одной ViewModel мне нужно программно создать несколько кнопок и связать их с командой, которая находится в родительской ViewModel.
У меня есть CommandHelper, который реализует интерфейс ICommand, и поэтому у меня есть следующее в родительской ViewModel.
public CommandHelper<string> NavCommand { get; private set; }
public MainWindowViewModel(ButtonGridViewModel buttonGridViewModel,
ConfigViewModel configViewModel)
{
// Some inits
...
NavCommand = new CommandHelper<string>(OnNavCommand);
}
private void OnNavCommand(string target)
{
if (_ViewModels.ContainsKey(target) && CurrentViewModel != _ViewModels[target])
{
LastViewModel = CurrentViewModel;
CurrentViewModel = _ViewModels[target];
}
}
В другой ViewModel в методе, где я генерирую кнопки, которые я пробовал:
Binding commandBinding = new Binding();
commandBinding.Path = new PropertyPath("NavCommand");
commandBinding.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(MainWindowViewModel), 1);
btn.SetBinding(Button.CommandProperty, commandBinding);
btn.CommandParameter = "ConfigViewModel";
Но я никогда не получаю команду таким образом ... Если я пытаюсь использовать Команду, расположенную в генерирующей ViewModel, я могу использовать ее без проблем, когда я не использую RelativeSource.
Я надеюсь, что кто-то имел эту проблему раньше и может дать мне правильный совет, как получить команду в родительской ViewModel, потому что я не хочу запускать событие, к которому я привязываю, в родительской ViewModel .. .
Я почти уверен, что некоторые из них работают, если я выполняю аналогичные задачи в XAML, я могу привязаться к команде родителей, но программно у меня возникает небольшая проблема ...
Привет Марли