如何将ICommand绑定到运行时构建的MenuItem

时间:2018-02-26 18:32:00

标签: wpf vb.net data-binding menuitem icommand

我有一个MenuItemViewModel的集合,它绑定到MenuItem的ItemsSource。

我想将ICommand绑定到通过此绑定创建的MenuItem对象。

问题是实际的MenuItem控件只在运行时添加,因为我绑定到他们的视图模型。

This is the GUI我现在有。

MenuItemViewModel.vb,包含要绑定的命令(所有这些成员都有相应的公共属性):

class ModalScreen extends React.Component {

  render() {
    return (
      <View style={{ flex: 1 ,flexDirection: 'column', justifyContent: 'flex-end'}}>
          <View style={{ height: "50%" ,width: '100%', backgroundColor:"#fff", justifyContent:"center"}}>
            <Text>Testing a modal with transparent background</Text>
          </View>
      </View>
    );
  }
}

这是我的NotifTilesViewModel:

    Private _text As String
    Private _menuItems As IList(Of MenuItemViewModel)
    Private _commandMenuItem As RelayCommand

因此,这个ViewModel是我绑定到你在附图上看到的通知磁贴UserControl的那个。

这是我的UserControl的XAML的相关部分:

Private _comPortMenuItems As ObservableCollection(Of MenuItemViewModel)
Public ReadOnly Property ComPortItems As ObservableCollection(Of MenuItemViewModel)
    Get
        Return _comPortMenuItems
    End Get
End Property

如您所见,我将ItemsSource属性绑定到MenuItemsViewModel的ObservableCollection。

但是我怎样才能将每个对应的MenuItem控件绑定到我对_commandMenuItem的公共属性?

1 个答案:

答案 0 :(得分:0)

我没有可用的Visual Studio,但我认为您可以通过在MenuItem中使用带有绑定ItemsSource的样式来完成。

像这样的东西(可能不是100%正确,但它应该给你的想法):

<Button.ContextMenu>
    <ContextMenu x:Name="notifTileContextMenu">
        <MenuItem Name="***" Command="{Binding Path=***}" Header="{Resx ResxName=***, Key=***}"/>
        <MenuItem Name="***" Header="{Resx ResxName=***, Key=***}"/>
        <Separator/>
        <MenuItem Name="mItemOpenPort" Header="{Resx ResxName=***, Key=***}" ItemsSource="{Binding Path=ComPortItems}">
            <MenuItem.ItemContainerStyle>
                <Style TargetType="MenuItem">
                    <Setter Property="Command" Value="{Binding FileOpenCommand}" />
                </Style>
            </MenuItem.ItemContainerStyle>
        </MenuItem>
    </ContextMenu>
</Button.ContextMenu>