2014-04-07 4 views
0

하위 항목이있는 메뉴를 작성하려고합니다.코드 뒤에 하위 메뉴 항목 추가

public interface IBaseItem 
    { 
     string Name { get; set; } 
    } 

클래스 :

public class ItemsMenu : IBaseItem 

{

public ObservableCollection<IBaseItem> SubItems { get; set; } 
    public string Name { get; set; } 

}

창 :

,691

나는 공중 인터페이스가
<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);에 내가이 오류 :

Exception has been thrown by the target of an invocation. Object reference not set to an instance of an object.

내가 잘못하고있어 모든 팁은?

답변

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; } 
}