Добавление статической кнопки в меню при привязке к ItemSouce

#c# #wpf

Вопрос:

у меня есть наблюдаемая коллекция в качестве источника элементов для моих руководств. мне нужна простая кнопка (см. Часть с комментариями) в конце списка элементов меню, которая может добавить новый элемент в эту коллекцию. это кажется простым, Но это Система.Windows.Разметка.Исключение XamlParseException в моем коде указывает, что коллекция уже используется. каков правильный способ достичь этого?

  <Menu Background="Transparent">
            
                    <MenuItem Header="WorkSpace" Background="Transparent" ItemsSource="{Binding  NosWorkSpaces}">
                 
                    <ItemsControl.ItemTemplate>

                        <DataTemplate >

                            <StackPanel Orientation="Horizontal">
                                <Label Content="{Binding Original.Title}"></Label>
                                <Button Content="Select"   Tag="WorkSpace_Load"  Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=mah:MetroWindow}, Path=DataContext.SelectWorkspaceCommand}"        CommandParameter="{Binding }" />
                                <Button Content="Load"   Tag="WorkSpace_Load"  Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=mah:MetroWindow}, Path=DataContext.LoadBinaryWorkspace}"        CommandParameter="{Binding }" />
                                <Button Content="Save"   Tag="WorkSpace_Save"  Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=mah:MetroWindow}, Path=DataContext.SaveWorkspaceCommand}"        CommandParameter="{Binding }" />
                            </StackPanel>
                        </DataTemplate>  
                     
                    </ItemsControl.ItemTemplate>
              <!--      <Button Content="New " />  this wont work -->

                </MenuItem>

            </Menu>
 

Ответ №1:

Что ж, я нашел решение, смешав некоторые ответы, даже я нахожу, что это не так просто для простого меню.

    <Menu Height="24" VerticalAlignment="Top">
                <Menu.Resources>
                    <CollectionViewSource Source="{Binding NosWorkSpaces}" x:Key="YourMenuItems"/>
                </Menu.Resources>
                <MenuItem Header="WorkSpaces" >
               
                        <MenuItem.ItemsSource>
                            <CompositeCollection>
                                <CollectionContainer Collection="{Binding Source={StaticResource YourMenuItems}}" />
                           
                                    <Separator></Separator>
                                <MenuItem Header="Add Worspace"  />
                               
                    
                            </CompositeCollection>
                        </MenuItem.ItemsSource>
                        <MenuItem.ItemTemplate>

                            <DataTemplate >
                                <StackPanel Orientation="Horizontal">
                                    <Label Content="{Binding Original.Title}"></Label>
                                    <Button Content="Select"   Tag="WorkSpace_Load"  Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=mah:MetroWindow}, Path=DataContext.SelectWorkspaceCommand}"        CommandParameter="{Binding }" />
                                    <Button Content="Load"   Tag="WorkSpace_Load"  Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=mah:MetroWindow}, Path=DataContext.LoadBinaryWorkspace}"        CommandParameter="{Binding }" />
                                    <Button Content="Save"   Tag="WorkSpace_Save"  Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=mah:MetroWindow}, Path=DataContext.SaveWorkspaceCommand}"        CommandParameter="{Binding }" />
                                </StackPanel>
                            </DataTemplate>
                        </MenuItem.ItemTemplate>
     
                </MenuItem>
            </Menu>
 

предоставление смешанного меню с источником элементов и таблицей данных.

введите описание изображения здесь