На основании этого sample, я хотел бы добавить, удалить элементы из меню программно, например, таким образом:WPF ObservableCollection и MenuItems
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]);
}
Только Добавить деталей на высоком уровне работает отлично , а не подменю, ни Remove. Что это не так? Не могли бы вы дать мне несколько намеков? Благодаря
EDIT: изменения, внесенные в 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);
}
}
}
Какой у вас XAML? Используете ли вы «Иерархический файл»? Вы реализуете 'INotifyPropertyChanged' для свойства' MenuItems'? – grek40
@ grek40, XAML совсем то же самое из оригинала ... еще не совсем так. Да, я реализовал INotifyPropertyChanged, но кажется, что он работает нормально (обновляя сам элемент), только если мы изменим исходное дерево. –