2013-07-24 3 views
3

У меня есть MenuItem, в котором есть коллекция элементов. Он выглядит как File -> Open Menuitem.Связать элементы с MenuItem -> use Command

Итак:

  • Файл
    • Открыть
      • Открыт DataBase
        • Файл 1
        • Файл 2
        • Файл 3

XAML Код:

<Menu> 
<MenuItem Header="File"> 
    <MenuItem Header="Open"> 
     <MenuItem Header="From Database" ItemsSource="{Binding OCFragebogen}"/> 
    </MenuItem> 
</MenuItem> 
</Menu> 

Я хочу, чтобы вызвать команду, когда конкретный пункт был щелкнул. Пример: Пользователь нажимает на файл 1, следует вызывать команду, где «Файл 1» является параметром команды.

ViewModel содержит детали, которые я хочу, чтобы отобразить в «коллекции» MenuItem

private ObservableCollection<string> _OCFragebogen; 
public ObservableCollection<string> OCFragebogen 
{ 
    get 
    { 
     if (_OCFragebogen == null) 
      _OCFragebogen = new ObservableCollection<string>(); 
     return _OCFragebogen; 
    } 
    set 
    { 
     _OCFragebogen = value; 
     RaisePropertyChanged(() => OCFragebogen); 
    } 
} 

Чтобы сделать это ясно: Когда пользователь нажимает на элемент (от ItemsSource) в MenuItem, команда следует назвать там, где я хочу что-то сделать с нажатым элементом.

Редактировать: Где мне нужно использовать команду для вызова метода (RelayCommand) в моей модели ViewModel? Я хочу, чтобы он использовался, когда был выбран элемент из элемента ItemsSource +. Я хочу передать выбранный элемент методу.

+0

И ваш вопрос/вопрос? – DHN

+0

Я не знаю, где я должен использовать команду, и как я могу передать щелкнутый элемент в команду с помощью 'CommandParameter'. В настоящее время я использую 'Command' в MenuItem с заголовком« Из базы данных », но он не вызывается этой командой, так как я нажимаю на Item из ItemsSource. – Rudi

ответ

1

Этот должен работать на вас

<MenuItem Header="From Database" 
      ItemsSource="{Binding YourItemSource}"> 
    <MenuItem.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem}, Path=DataContext.YourCommandName}"></Setter> 
      <Setter Property="CommandParameter" Value="{Binding}"></Setter> 
     </Style> 
    </MenuItem.ItemContainerStyle> 
</MenuItem> 
+0

Спасибо, отлично работает :) – Rudi

2

Попробуйте изменить свою ItemContainerStyle, а затем связать команду с ItemsSource пункта

<MenuItem Header="From Database" ItemsSource="{Binding OCFragebogen}" 
<MenuItem.ItemContainerStyle> 
    <Style TargetType="MenuItem"> 
    <Setter Property="Command" Value="{Binding YourCommand}" /> 
    </Style> 
</MenuItem.ItemContainerStyle> 
</MenuItem> 

Я не пробовал, если он работает только предположение

отредактированный ответ

   <MenuItem Header="From Database" ItemsSource="{Binding OCFragebogen}"> 
        <MenuItem.ItemContainerStyle> 
         <Style TargetType="MenuItem"> 
          <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MenuItem}}, Path=DataContext.YourCommand }" /> 
          <Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Self}, Path=Header}"/> 
         </Style> 
        </MenuItem.ItemContainerStyle> 
       </MenuItem> 
+0

Вот что я ищу, но это не работает. Команда не вызывается + Мне все равно нужно передать щелкнутый элемент в мою вызванную команду. – Rudi

+0

Проверьте ошибки привязки в окне вывода – whoisthis

+0

Ahh теперь я понимаю немного больше. Я думал, что у вас есть ItemSource всех элементов меню, и каждый элемент меню имеет свою собственную команду. Но это не так, menuitem - это коллекция, но у каждого есть одно действие, а другой параметр. Не могли бы вы прояснить? – whoisthis

Смежные вопросы