我正在尝试使用子项构建菜单。
我有一个公共界面:
public interface IBaseItem
{
string Name { get; set; }
}
一堂课:
public class ItemsMenu : IBaseItem
{
public ObservableCollection<IBaseItem> SubItems { get; set; }
public string Name { get; set; }
}
一个窗口:
<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>
并在代码背后:
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;
}
}
}
但是在SubItem2.SubItems.Add(SubItem1);
行上我收到了这个错误:
调用目标抛出了异常。 对象引用未设置为对象的实例。
我做错的任何提示?
答案 0 :(得分:1)
在使用之前初始化SubItem2.SubItems
。
SubItem2.SubItems = new ObservableCollection<IBaseItem>();
您也可以在ItemsMenu
类的构造函数中初始化它。
public class ItemsMenu : IBaseItem
{
public ItemsMenu()
{
SubItems = new ObservableCollection<IBaseItem>();
}
public ObservableCollection<IBaseItem> SubItems { get; set; }
public string Name { get; set; }
}