Reputation: 117
I'm trying to build a menu with sub items.
I have a public interface:
public interface IBaseItem
{
string Name { get; set; }
}
a class:
public class ItemsMenu : IBaseItem
{
public ObservableCollection<IBaseItem> SubItems { get; set; }
public string Name { get; set; }
}
a window :
<Window x:Class="WpfApplication19.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Menu Name="myMenu" DisplayMemberPath="Name"></Menu>
</Grid>
and in code behind:
using System.Collections.ObjectModel;
namespace WpfApplication19
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
public MainWindow()
{
var observableCollection = new ObservableCollection<ItemsMenu>();
var Item1 = new ItemsMenu
{
Name = "A"
};
var SubItem1 = new ItemsMenu()
{
Name = "bbbb"
};
var Item2= new ItemsMenu
{
Name = "B"
};
Item2.SubItems.Add(SubItem1);
var Item3= new ItemsMenu
{
Name = "C"
};
observableCollection.Add(Item1);
observableCollection.Add(Item2);
observableCollection.Add(Item3);
InitializeComponent();
myMenu.ItemsSource = observableCollection;
}
}
}
But on line SubItem2.SubItems.Add(SubItem1);
i get this error:
Exception has been thrown by the target of an invocation. Object reference not set to an instance of an object.
Any tips where I'm doing it wrong?
Upvotes: 0
Views: 1660
Reputation: 13531
Initialize SubItem2.SubItems
before you use it.
SubItem2.SubItems = new ObservableCollection<IBaseItem>();
You could also initialize it in the constructor of the ItemsMenu
class.
public class ItemsMenu : IBaseItem
{
public ItemsMenu()
{
SubItems = new ObservableCollection<IBaseItem>();
}
public ObservableCollection<IBaseItem> SubItems { get; set; }
public string Name { get; set; }
}
Upvotes: 1