Контекстное меню WPF MVVM, привязанное к ObservableCollection <string>Команда не запускается - PullRequest
2 голосов
/ 20 января 2011

Я пытаюсь привязать ObservableCollection к ContextMenu, используя MVVM.Но когда я пытаюсь выполнить команду, ничего не происходит.Кроме того, мне нужно передать строку как параметр команды для события.

Ниже приведен код xaml:

<ContextMenu Name="ctxAddApplication" ItemsSource="{Binding Path=ApplicationTypes}">
  <ContextMenu.ItemContainerStyle>
    <Style TargetType="{x:Type MenuItem}">
      <Setter Property="Command" Value="{Binding AddRequirementCommand}"/>
      <Setter Property="CommandParameter" Value="{Binding}"/>
    </Style>
  </ContextMenu.ItemContainerStyle>
</ContextMenu>

Ниже представлена ​​модель представленияКод:

public ObservableCollection<string> ApplicationTypes { get; private set; }

public ComposableCommand AddRequirementCommand { get; private set; }

this.AddRequirementCommand = new ComposableCommand(this.AddRequirementView);

private void AddRequirementView(object applicationName) {}

Пожалуйста, помогите !!!

Ответы [ 3 ]

2 голосов
/ 20 января 2011

Контекст данных для каждого пункта меню будет тем, с чем он связан. В вашем случае это строка, потому что ваше свойство ApplicationTypes является коллекцией строк. Таким образом, ваша привязка для установки команды не будет работать, поскольку у типа String.

нет свойства AddRequirementCommand.
2 голосов
/ 20 января 2011

На всякий случай, если вам нужен код:

<ContextMenu Name="ctxAddApplication" ItemsSource="{Binding Path=ApplicationTypes}">
                <ContextMenu.ItemContainerStyle>
                    <Style TargetType="{x:Type MenuItem}">
                        <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}, Path=DataContext.AddRequirementCommand}"/>
                        <Setter Property="CommandParameter" Value="{Binding}"/>
                    </Style>
                </ContextMenu.ItemContainerStyle>
            </ContextMenu>
0 голосов
/ 20 января 2011

Внутри ContextMenu представление для каждого элемента привязано к элементу из коллекции.

<Setter Property="Command" Value="{Binding AddRequirementCommand}" />

это попытается найти AddRequirementCommand в строковом классе.Используйте RelativeSource в этой привязке.Также используйте VS отладчик и окно вывода, чтобы увидеть ошибки привязки, обычно это очень помогает.

...