Можно ли сделать привязку в элементе управления меню с помощью списка? - PullRequest
1 голос
/ 11 января 2012

Я создал стиль для своего элемента управления меню, и теперь я хочу использовать этот стиль для всех элементов меню, но с другим текстом в текстовом поле. Мне было интересно, могу ли я использовать 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 Ответ

1 голос
/ 11 января 2012

Вы пытаетесь привязать текстовый элемент к 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; Вы можете использовать что-то вроде RelayCommand или ReactiveCommand, чтобы превратить это в вызов метода.

Это позволяет получить плоское меню; для иерархического меню вам придется сделать что-то немного другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...