WPF Dynamic Context Menu with Caliburn.Micro












0















I am trying to create a dynamic context menu in my Caliburn.Micro based application. Can anyone share an example of an effective way to do that?
So far, I have a very minimal model for each context menu item:



public class ContextMenuUiModel
{
public string Name { get; set; }
}


a property in my view model that presents a list of those menu item models:



      BindableCollection<ContextMenuUiModel> m_ContextMenuItems = new BindableCollection<ContextMenuUiModel>
{
new ContextMenuUiModel { Name="Item 1"},
new ContextMenuUiModel { Name="Item 2"},
new ContextMenuUiModel { Name="Item 3"}
};
public BindableCollection<ContextMenuUiModel> ContextMenuItems
{
get {return m_ContextMenuItems;}
}


and, a menu item named for the collection property (based on the menu creation in FreePIE, found via this question and answer)



         <TreeView  x:Name="ConfigItemTree" VerticalAlignment="Top" ItemsSource="{Binding ConfigTreeRoot}" >
<TreeView.ContextMenu>
<ContextMenu >
<MenuItem x:Name="ContextMenuItems" DisplayMemberPath="Name" />
</ContextMenu>
</TreeView.ContextMenu>


Caliburn.Micro logging reports "No actionable element for get_ContextMenuItems". Also, although Caliburn is noting other named elements for which no property was found (e.g. "Binding Convention Not Applied: Element ConfigItemTree did not match a property."), it is not making a similar statement for ContextMenuItems. So, it seems Caliburn is just not seeing the ContextMenu as an element it could or should deal with.



Maybe the issue is that Caliburn can't see the context menu because it doesn't actually exist until a right click happens (similar to this issue with collapsed elements)?



Ultimately, I would like the context menu's contents to be based on the tree view item that was right clicked, possibly including sub menus and/or disabled items. For a start, though, I'll settle for whatever items I can get.










share|improve this question



























    0















    I am trying to create a dynamic context menu in my Caliburn.Micro based application. Can anyone share an example of an effective way to do that?
    So far, I have a very minimal model for each context menu item:



    public class ContextMenuUiModel
    {
    public string Name { get; set; }
    }


    a property in my view model that presents a list of those menu item models:



          BindableCollection<ContextMenuUiModel> m_ContextMenuItems = new BindableCollection<ContextMenuUiModel>
    {
    new ContextMenuUiModel { Name="Item 1"},
    new ContextMenuUiModel { Name="Item 2"},
    new ContextMenuUiModel { Name="Item 3"}
    };
    public BindableCollection<ContextMenuUiModel> ContextMenuItems
    {
    get {return m_ContextMenuItems;}
    }


    and, a menu item named for the collection property (based on the menu creation in FreePIE, found via this question and answer)



             <TreeView  x:Name="ConfigItemTree" VerticalAlignment="Top" ItemsSource="{Binding ConfigTreeRoot}" >
    <TreeView.ContextMenu>
    <ContextMenu >
    <MenuItem x:Name="ContextMenuItems" DisplayMemberPath="Name" />
    </ContextMenu>
    </TreeView.ContextMenu>


    Caliburn.Micro logging reports "No actionable element for get_ContextMenuItems". Also, although Caliburn is noting other named elements for which no property was found (e.g. "Binding Convention Not Applied: Element ConfigItemTree did not match a property."), it is not making a similar statement for ContextMenuItems. So, it seems Caliburn is just not seeing the ContextMenu as an element it could or should deal with.



    Maybe the issue is that Caliburn can't see the context menu because it doesn't actually exist until a right click happens (similar to this issue with collapsed elements)?



    Ultimately, I would like the context menu's contents to be based on the tree view item that was right clicked, possibly including sub menus and/or disabled items. For a start, though, I'll settle for whatever items I can get.










    share|improve this question

























      0












      0








      0








      I am trying to create a dynamic context menu in my Caliburn.Micro based application. Can anyone share an example of an effective way to do that?
      So far, I have a very minimal model for each context menu item:



      public class ContextMenuUiModel
      {
      public string Name { get; set; }
      }


      a property in my view model that presents a list of those menu item models:



            BindableCollection<ContextMenuUiModel> m_ContextMenuItems = new BindableCollection<ContextMenuUiModel>
      {
      new ContextMenuUiModel { Name="Item 1"},
      new ContextMenuUiModel { Name="Item 2"},
      new ContextMenuUiModel { Name="Item 3"}
      };
      public BindableCollection<ContextMenuUiModel> ContextMenuItems
      {
      get {return m_ContextMenuItems;}
      }


      and, a menu item named for the collection property (based on the menu creation in FreePIE, found via this question and answer)



               <TreeView  x:Name="ConfigItemTree" VerticalAlignment="Top" ItemsSource="{Binding ConfigTreeRoot}" >
      <TreeView.ContextMenu>
      <ContextMenu >
      <MenuItem x:Name="ContextMenuItems" DisplayMemberPath="Name" />
      </ContextMenu>
      </TreeView.ContextMenu>


      Caliburn.Micro logging reports "No actionable element for get_ContextMenuItems". Also, although Caliburn is noting other named elements for which no property was found (e.g. "Binding Convention Not Applied: Element ConfigItemTree did not match a property."), it is not making a similar statement for ContextMenuItems. So, it seems Caliburn is just not seeing the ContextMenu as an element it could or should deal with.



      Maybe the issue is that Caliburn can't see the context menu because it doesn't actually exist until a right click happens (similar to this issue with collapsed elements)?



      Ultimately, I would like the context menu's contents to be based on the tree view item that was right clicked, possibly including sub menus and/or disabled items. For a start, though, I'll settle for whatever items I can get.










      share|improve this question














      I am trying to create a dynamic context menu in my Caliburn.Micro based application. Can anyone share an example of an effective way to do that?
      So far, I have a very minimal model for each context menu item:



      public class ContextMenuUiModel
      {
      public string Name { get; set; }
      }


      a property in my view model that presents a list of those menu item models:



            BindableCollection<ContextMenuUiModel> m_ContextMenuItems = new BindableCollection<ContextMenuUiModel>
      {
      new ContextMenuUiModel { Name="Item 1"},
      new ContextMenuUiModel { Name="Item 2"},
      new ContextMenuUiModel { Name="Item 3"}
      };
      public BindableCollection<ContextMenuUiModel> ContextMenuItems
      {
      get {return m_ContextMenuItems;}
      }


      and, a menu item named for the collection property (based on the menu creation in FreePIE, found via this question and answer)



               <TreeView  x:Name="ConfigItemTree" VerticalAlignment="Top" ItemsSource="{Binding ConfigTreeRoot}" >
      <TreeView.ContextMenu>
      <ContextMenu >
      <MenuItem x:Name="ContextMenuItems" DisplayMemberPath="Name" />
      </ContextMenu>
      </TreeView.ContextMenu>


      Caliburn.Micro logging reports "No actionable element for get_ContextMenuItems". Also, although Caliburn is noting other named elements for which no property was found (e.g. "Binding Convention Not Applied: Element ConfigItemTree did not match a property."), it is not making a similar statement for ContextMenuItems. So, it seems Caliburn is just not seeing the ContextMenu as an element it could or should deal with.



      Maybe the issue is that Caliburn can't see the context menu because it doesn't actually exist until a right click happens (similar to this issue with collapsed elements)?



      Ultimately, I would like the context menu's contents to be based on the tree view item that was right clicked, possibly including sub menus and/or disabled items. For a start, though, I'll settle for whatever items I can get.







      wpf data-binding caliburn.micro






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 20 '18 at 15:37









      babackmanbabackman

      506




      506
























          1 Answer
          1






          active

          oldest

          votes


















          1














          Bind the ItemsSource property of the ContextMenu to the ContextMenuItems property:



          <ContextMenu ItemsSource="{Binding PlacementTarget.DataContext.ContextMenuItems, RelativeSource={RelativeSource Self}}" 
          DisplayMemberPath="Name" />





          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53396484%2fwpf-dynamic-context-menu-with-caliburn-micro%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            Bind the ItemsSource property of the ContextMenu to the ContextMenuItems property:



            <ContextMenu ItemsSource="{Binding PlacementTarget.DataContext.ContextMenuItems, RelativeSource={RelativeSource Self}}" 
            DisplayMemberPath="Name" />





            share|improve this answer




























              1














              Bind the ItemsSource property of the ContextMenu to the ContextMenuItems property:



              <ContextMenu ItemsSource="{Binding PlacementTarget.DataContext.ContextMenuItems, RelativeSource={RelativeSource Self}}" 
              DisplayMemberPath="Name" />





              share|improve this answer


























                1












                1








                1







                Bind the ItemsSource property of the ContextMenu to the ContextMenuItems property:



                <ContextMenu ItemsSource="{Binding PlacementTarget.DataContext.ContextMenuItems, RelativeSource={RelativeSource Self}}" 
                DisplayMemberPath="Name" />





                share|improve this answer













                Bind the ItemsSource property of the ContextMenu to the ContextMenuItems property:



                <ContextMenu ItemsSource="{Binding PlacementTarget.DataContext.ContextMenuItems, RelativeSource={RelativeSource Self}}" 
                DisplayMemberPath="Name" />






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 20 '18 at 15:57









                mm8mm8

                84.4k81931




                84.4k81931
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53396484%2fwpf-dynamic-context-menu-with-caliburn-micro%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    How to change which sound is reproduced for terminal bell?

                    Can I use Tabulator js library in my java Spring + Thymeleaf project?

                    Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents