none
Accordion,难道不能和PRISM配合使用 RRS feed

  • 问题

  • 大家好:

     这次我用Accordion作为了菜单栏的容器,并配置了一个适配器,但是我调试的时候,并没法有发现有进入适配器。代码如下:

     <Grid x:Name="LayoutRoot" Background="White">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="0.3*" />
          <ColumnDefinition Width="0.7*" />
        </Grid.ColumnDefinitions>
        <tk:Accordion Grid.Column="0"
                   prism:RegionManager.RegionName="MenuRegion" />
        <sdk:TabControl Grid.Column="1"
                    prism:RegionManager.RegionName="ContentRegion"
                    DisplayMemberPath="Title"/>
      </Grid>
    

    适配器代码如下:<pre lang="x-c#">namespace SilverlightTEST
    {
      public class AccordionAdapter : RegionAdapterBase<Accordion>
      {
        public AccordionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
          : base(regionBehaviorFactory)
        { }
    
        protected override void Adapt(IRegion region, Accordion regionTarget)
        {
          region.ActiveViews.CollectionChanged += (sender, args) =>
          {
            switch (args.Action)
            {
              case NotifyCollectionChangedAction.Add:
                foreach (AccordionItems view in args.NewItems)
                {
                  AccordionItem itemn = new AccordionItem();
                  itemn.Header = view.TX;
                  itemn.Content = view.TX;
                  regionTarget.Items.Add(itemn);
                }
                break;
              
            }
          };
        }
    
        protected override IRegion CreateRegion()
        {
          return new AllActiveRegion();
        }
      }
    }
    
    
    调用代码如下:<pre lang="x-c#"> public class SliverlightModule : IModule
      {
        public SliverlightModule(IRegionManager regionManager)
        {
          if(regionManager == null)
          {
            throw new ArgumentNullException("regionManager");
          }
    
          RegionManager = regionManager;
        }
    
        private IRegionManager RegionManager { get; set; }
    
        public void Initialize()
        {
          //CrmCommands.OpenCustomerViewCommand.RegisterCommand(new DelegateCommand<object>(ExecuteOpenCustomerView));
          RegionManager.AddToRegion("MenuRegion", CreateModuleDefinition());
          //RegionManager.AddToRegion("MenuRegion", new SilverlightControl1());
          
        }
    
    
        public AccordionItems CreateModuleDefinition()
        {
          AccordionItems item = new AccordionItems();
          // return "<tk:AccordionItem Header='DEMO1'><ListBox><ListBoxItem >2222222222</ListBoxItem></ListBox></tk:AccordionItem>";
          item.TX = "managerment";
          return item;
        }
      }
    
      RegionManager.AddToRegion("MenuRegion", CreateModuleDefinition());
    此处代码报错,未将对象引用到实例。
    
    2011年4月25日 13:51

答案

  • 你好,

    “未将对象引用到实例” 说明你使用的对象为空(null). 也就是说该对你没有引用任何实例。

    请检查你的RegionManager是否有正确引用到其它实例。

     

     

     


    Daoping Liu - MSFT
    2011年4月27日 3:35
    版主