是否可以使用列表在菜单控件中进行绑定?

时间:2012-01-10 21:32:27

标签: c# wpf xaml data-binding

我为我的菜单控件创建了一个样式,现在我想对所有menuItem使用该样式,但在文本框中使用不同的文本。我想知道我是否可以使用List填充绑定元素...我试过但它不起作用...我错过了什么或者我必须使用别的东西?

  List<string> itemArray = new List<string>();
        itemArray.Add("label1");
        itemArray.Add("label2");
        itemArray.Add("label3");
        Binding binding = new Binding();
        binding.Path = new PropertyPath("itemArray");

       this.menu1.SetBinding(TextBox.TextProperty, binding);

并且风格的一部分是,如果它有帮助......:

 <Setter.Value>
    <ControlTemplate TargetType="{x:Type MenuItem}">
        <Grid>
            <Border Name="MainBorder" BorderThickness="2,2,2,0" >
                <Grid>
                    <TextBlock Text="{Binding Path=itemArray}" Margin="30,10,0,0" FontFamily="Arial" FontSize="14" FontWeight="Bold" />
                    <Image Width="15" Height="15" Source="image.PNG" Margin="-100,0,0,0" />
                </Grid>
            </Border>
        </Grid>
    </ControlTemplate>
</Setter.Value>

1 个答案:

答案 0 :(得分:1)

您正在尝试将文本元素绑定到List<T>,这将导致类型名称。如果您希望菜单从对象列表中填充自己,请考虑将菜单的ItemsSource属性绑定到该列表:

     <Menu ItemsSource="{Binding ListOfItems}">
        <Menu.ItemTemplate>
           <DataTemplate>
              <MenuItem Header="{Binding Text}" Command="{Binding Command}" />
           </DataTemplate>
        </Menu.ItemTemplate>
     </Menu>

在此示例中,每个列表项都是一个对象,其Text属性显示为显示字符串,而Command属性是实现ICommand的对象。当用户选择菜单项时,调用该列表项的Command.Execute方法;您可以使用RelayCommandReactiveCommand之类的内容将其转换为方法调用。

这允许平面菜单;对于分层菜单,你必须做一些不同的事情。