Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
2090
ApplicationMenu2010: Create Views on demand
posted

Hello,

I am using xamRibbon and ApplicationMenu2010 in a MVVM application. In order to put configuration items (like user setting, system wide setting etc.) into the ApplicationMenu2010 I see following options:

1. Put the content directly in XAML of the shell window

Pro: Clear and easy

Con: The whole XAML loading is done at startup of the shell and the configuration might not be used in the current session.

2. Add  the menu items in code behind:

Pro: Not loaded at startup

Con: On _OnOpened() all items are created -> slow

private void ApplicationMenu2010_OnOpened(object sender, RoutedEventArgs e)
{
	ApplicationMenu2010 menu = (ApplicationMenu2010)sender;
if (menu.Items.Count > 0) { return; }

menu.Items.Add(new ApplicationMenu2010Item { Header = "Einstellungen" });

menu.Items.Add(new ApplicationMenu2010Item { Header = "Benutzereinstellungen", Content = new vBenutzerEinstellungen(new vmBenutzerEinstellungen()) });
menu.Items.Add(new ApplicationMenu2010Item { Header = "Systemweite Farben", Content = new vSystemweiteFarben(new vmSystemweiteFarben()) });
menu.Items.Add(new ApplicationMenu2010Item { Header = "Systemweite Einstellungen", Content = new vGlobalConfig(new vmGlobalConfig()) });
}

I wonder if there is a possibility to create only the currently clicked it at the time its needed.

var pwditem = new ApplicationMenu2010Item { Header = "Test", Style = (Style)GlobalStyles.Instance["ApplicationMenuItem"] };
	pwditem.SetBinding(ApplicationMenu2010Item.CommandProperty, new Binding("OpenConfigurationItem"));
	menu.Items.Add(pwditem);

private vTest OpenConfigurationItem()
{
	View vTest;
	vTest= this.Container.GetInstance<AppFact.Infrastructure.MVVM.ViewBase>("vTest");
         return vTest;
}

I want to create the different views with configuration records only when they are really neded.

In addition: Is there a way to mark a ApplicationMenu2010Item as header without click function?

Thanks

Niko

Parents
  • 34810
    Offline posted

    Hello Niko,

    I am not entirely sure I completely understand your requirement in this case, but it sounds like you are looking to generate your ApplicationMenu2010Item elements as needed, depending on the view that you have. If this impression is incorrect, please let me know as the following is based upon it.

    In order to do this, I would recommend that you continue with the Opened event of the ApplicationMenu2010. In this event, you can clear the Items collection of your ApplicationMenu2010 (if needed) and check the current view in your application. If you store some information regarding the ApplicationMenu2010, such as a List of ApplicationMenu2010Item elements, you can then check that information or loop through that collection of ApplicationMenu2010Item elements and add them to your ApplicationMenu2010 menu. This should allow you to create a potentially different ApplicationMenu2010 view for each of your views.

    As for marking an ApplicationMenu2010Item as a header without a click function, I suppose one thing you could do is mark the IsHitTestVisible property of the ApplicationMenu2010Item as "false." This would prevent any sort of mouse event from firing on it, although, you would also lose the highlight on mouse hover effect as well. Another thing you could try in this case is to utilize the PreviewMouseDown/Up events of the ApplicationMenu2010Item and mark them handled. This should prevent the internally handled MouseDown/Up event from going through, essentially marking your ApplicationMenu2010Item "unclickable."

    I hope this helps. Please let me know if you have any other questions or concerns on this matter.

    Sincerely,
    Andrew
    Associate Developer

Reply Children