Программно добавить команду родительского ViewModel для кнопки - PullRequest
0 голосов
/ 08 ноября 2019

Я работаю над приложением, которое использует 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, я могу привязаться к команде родителей, но программно у меня возникает небольшая проблема ...

Привет Марли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...