3

我有一个字符串数组。对于这些字符串中的每一个,我想创建一个单独的 xaml 元素(<menuitem>来自外部库):

<MenuItem Header="Update">
  <MenuItem Header="arrayvalue1" Command="{Binding UpdateCommand}" />
  <MenuItem Header="arrayvalue2" Command="{Binding UpdateCommand}" />
  <MenuItem Header="arrayvalue3" Command="{Binding UpdateCommand}" />
</MenuItem>

我不想硬编码 3 个元素,而是想从字符串数组中创建这些元素。

这可能吗?如果可以,怎么做?

4

2 回答 2

3

MenuItem 是一个 ItemsControl,因此您可以将任何集合绑定到 ItemsSource 属性,它会为您生成子项。在 MenuItem 的情况下,生成的子项也是 MenuItem。要将绑定值应用于这些子项的属性,您可以设置将应用于每个子项的 ItemContainerStyle。由于您要使用的命令位于顶级 DataContext 上,您将需要使用更多的间接绑定,这可能会因您使用的技术而异。这是 WPF 的外观:

        <MenuItem Header="Update" ItemsSource="{Binding Strings}">
            <MenuItem.ItemContainerStyle>
                <Style TargetType="{x:Type MenuItem}">
                    <Setter Property="Command" Value="{Binding Path=DataContext.UpdateCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Menu}}}" />
                    <Setter Property="Header" Value="{Binding}" />
                </Style>
            </MenuItem.ItemContainerStyle>
        </MenuItem>
于 2013-01-28T17:43:41.533 回答
1

您要查找的内容称为ItemsControl。您可以通过向其中添加 ItemTemplate 来使用它以您喜欢的任何形式呈现一堆项目。

于 2013-01-28T17:42:55.357 回答