On the base of this sample, I'd like to Add, Remove items from Menu programmatically, for example in this way:
void ChangeItemSubitems()
{
// TODO: Add event handler implementation here.
MenuItems.Add(new MenuItemViewModel { Header = "delta" });
MenuItems[3].MenuItems = new ObservableCollection<MenuItemViewModel>();
MenuItems[3].MenuItems.Add(new MenuItemViewModel { Header = "delta 1" });
MenuItems[3].MenuItems.Add(new MenuItemViewModel { Header = "delta 2" });
MenuItems.Remove(MenuItems[1].MenuItems[0]);
}
Only the Add of Items at high level works fine, not submenu, neither the Remove. What is it wrong? Could you give me some hints? Thanks
EDIT: change made to MenuItemViewModel
public class MenuItemViewModel : ViewModelBase
{
private readonly ICommand _command;
public MenuItemViewModel()
{
_command = new CommandViewModel(Execute);
}
public MenuItemViewModel(Action action)
{
_command = new CommandViewModel(action);
}
private string _header;
public string Header
{
get { return _header; }
set
{
_header = value;
RaisePropertyChangedEvent("Header");
}
}
public ObservableCollection<MenuItemViewModel> MenuItems { get; set; }
public ICommand Command
{
get
{
return _command;
}
}
private void Execute()
{
// (NOTE: In a view model, you normally should not use MessageBox.Show()).
MessageBox.Show("Clicked at " + Header);
}
}
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChangedEvent(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
PropertyChanged(this, e);
}
}
}