带上下文菜单的WPF按钮

Pad*_*aja 2 wpf contextmenu button

我是WPF的新手,我正在尝试使用来自视图模型的上下文菜单项将上下文菜单绑定到按钮.

这就是我在做的事情:

<Button x:Name="btn" Content="Context Menu">
  <Button.ContextMenu>
    <ContextMenu x:Name="cm" ItemsSource="ItemsList"/>
  </Button.ContextMenu>
</Button>

private List<string> itemsList = null;
public List<string> ItemsList
{
  get
  {
    if(itemsList == null)
      itemsList = new List<string>(myStringArrayOfItems);
    return itemsList;                
  }
}
Run Code Online (Sandbox Code Playgroud)

XAML编辑器一直显示错误:"IEnumerable"的TypeConverter不支持从字符串转换.

我在这做错了什么?

此外,假设我得到了这个工作,我该怎么做才能将这些项绑定到命令并在单击该项时执行一些工作?我想为所有菜单项运行相同的命令,只需使用项字符串作为参数.

dko*_*ozl 7

如果你这样做,ItemsSource="ItemsList"你不绑定,ItemsList但将其设置为字符串ItemsList,因此你的错误.尝试绑定它像这样:

<ContextMenu x:Name="cm" ItemsSource="{Binding Path=ItemsList}"/>
Run Code Online (Sandbox Code Playgroud)

至于那Command部分你需要一些ICommand接口的实现(比如这里),然后你像它一样绑定它ItemContainerStyle:

<ContextMenu ...>
   <ContextMenu.ItemContainerStyle>
      <Style TargetType="{x:Type MenuItem}">
         <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}, Path=PlacemantTarget.DataContext.ItemChanged }"/>
         <Setter Property="CommandParameter" Value="{Binding}"/>
      </Style>
   </ContextMenu.ItemContainerStyle>
</ContextMenu >
Run Code Online (Sandbox Code Playgroud)