MVVM Dynamique de Menu de l'INTERFACE utilisateur de se lier avec les ViewModel

Je travaille avec une équipe sur l'application Métier. Nous aimerions avoir une dynamique Menu de contrôle, ce qui crée un menu basé sur le profil de l'utilisateur connecté. Dans les précédents scénarios de développement (à savoir ASP.NET nous utilisons pour itérer sur les données qui décrit la collecte et de générer des MenuItem de façon dynamique. Dans MVVM comment puis-je faire? Puis-je séparer XAML vue de ViewModel qui décrit les éléments de menu?

Solution:

Avec les apports des commentateurs j'ai été en mesure de lier Menu de façon dynamique avec les données de ViewModel. Cette l'article a été d'une grande aide aussi.

XAML:

<HierarchicalDataTemplate DataType="{x:Type self:Menu}" ItemsSource="{Binding Path=Children, UpdateSourceTrigger=PropertyChanged}">
    <ContentPresenter Content="{Binding Path=MenuText}" RecognizesAccessKey="True"/>
</HierarchicalDataTemplate>

[...]

<Menu Height="21" Margin="0" Name="mainMenu" VerticalAlignment="Top" HorizontalAlignment="Stretch" 
      ItemsSource="{Binding Path=MenuItems, UpdateSourceTrigger=PropertyChanged}" ItemContainerStyle="{StaticResource TopMenuItems}">
    <Menu.Background>
        <ImageBrush ImageSource="/Wpf.Modules;component/Images/MenuBg.jpg" />
    </Menu.Background>
</Menu>

Menu classe de données:

public class Menu : ViewModelBase
{
    public Menu()
    {
        IsEnabled = true;
        Children = new List<Menu>();
    }

    #region [ Menu Properties ]

    private bool _isEnabled;
    private string _menuText;
    private ICommand _command;
    private IList<Menu> _children;

    public string MenuText
    {
        get { return _menuText; }
        set
        {
            _menuText = value;
            base.OnPropertyChanged("MenuText");
        }
    }

    public bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            _isEnabled = value;
            base.OnPropertyChanged("IsEnabled");
        }
    }

    public ICommand Command
    {
        get { return _command; }
        set
        {
            _command = value;
            base.OnPropertyChanged("Command");
        }
    }

    public IList<Menu> Children
    {
        get { return _children; }
        set
        {
            _children = value;
        }
    }

    #endregion
}
Après avoir passé quelque temps dans Google j'ai trouvé HierarchicalDataTemplate pourrait être utile dans la dynamique de création de menu, et pourtant distincte "préoccupations" avec le pattern MVVM. Je n'ai pas d'exemples de code encore 🙁

OriginalL'auteur Raj | 2009-09-08