2013-03-11 3 views
0

Я хочу разработать общий контекстменю в wpf с mvvm. Я хотел бы отобразить его в каждой модели viewModel, имеющей представление list со стилем: ItemContainerStyle = "{DynamicResource ListViewItemContainerStyle}".Совет/идея, как я могу получить общее контекстное меню?

Контекстное меню будет иметь 2 варианта, которые будут включены или нет, в зависимости от некоторых ограничений в каждой модели представления. Включенный или нет будет управляться с помощью canececute команды.

У меня нет проблем, если я поместил его в каждый вид внутри списка, но хотел бы иметь его только в одном месте, кроме как в каждом списке. Я попытался поместить его в ListViewItemContainerStyle, но он показывает исключение: «невозможно добавить System.Windows.Controls.ContextMenu в System.Object». Вот мой фрагмент кода

<Style x:Key="ListViewItemContainerStyle" 
     TargetType="ListViewItem"> 
    . 
    . 
    . 
    <Setter Property="ContextMenu"> 
     <Setter.Value> 
      <ContextMenu> 
       <MenuItem Command="{Binding Path=Command}" 
          CommandParameter="AddNew"> 
        <MenuItem.Header> 
         <TextBlock Text="{x:Static p:TextResources.New}" /> 
        </MenuItem.Header> 
       </MenuItem> 
       <MenuItem Command="{Binding Path=Command}" 
          CommandParameter="Delete"> 
        <MenuItem.Header> 
         <TextBlock Text="{x:Static p:TextResources.Delete}" /> 
        </MenuItem.Header> 
       </MenuItem> 
      </ContextMenu> 
     </Setter.Value> 
    </Setter> 
. 
. 
. 

Любая идея о том, как это сделать?

ответ

0

Попробуйте это:

<ContextMenu x:Shared="False" x:Key="ListViewContextMenu> 
       <MenuItem Command="{Binding Path=Command}" 
          CommandParameter="AddNew"> 
        <MenuItem.Header> 
         <TextBlock Text="{x:Static p:TextResources.New}" /> 
        </MenuItem.Header> 
       </MenuItem> 
       <MenuItem Command="{Binding Path=Command}" 
          CommandParameter="Delete"> 
        <MenuItem.Header> 
         <TextBlock Text="{x:Static p:TextResources.Delete}" /> 
        </MenuItem.Header> 
       </MenuItem> 
      </ContextMenu> 

<Style x:Key="ListViewItemContainerStyle" 
     TargetType="ListViewItem"> 
    <Setter Property="ContextMenu" Value="{StaticResource ListViewContextMenu}"/> 
+0

Теперь моя проблема заключается в том, что привязка осуществляется к модели, а не к ViewModel, поэтому команды не будут выполняться. Спасибо! – mekoloko