Soy nuevo en WPF y MVVM. Estoy trabajando con un equipo en la aplicación LoB. Nos gustaría tener un control dinámico Menu
, que crea el menú basado en el perfil de usuario registrado. En escenarios de desarrollo anteriores (a saber, ASP.NET), utilizamos para iterar a través de los datos que describe la recopilación y generar MenuItem
de forma dinámica. En MVVM, ¿cómo podría hacer esto? ¿Puedo separar la vista XAML de ViewModel, que describe los elementos del menú?Interfaz de usuario de menú dinámico MVVM vinculante con ViewModel
Solución:
Con aportaciones de los comentaristas que fueron capaces de unirse Menu
dinámicamente con los datos del modelo de vista. Este article fue de gran ayuda también.
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
clase de datos:
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
}
Después de pasar algún tiempo en Google, encontré que HierarchicalDataTemplate podría ser útil en la creación de menús dinámicos y, sin embargo, separar "preocupaciones" con el patrón de MVVM. Todavía no tengo ejemplos de código :( – Raj