XAF之向DashboardView中动态添加ViewItem

         在Application Model中添加 DashboardView的ViewItem是很方便的,但有时候我们也需要在代码中动态地添加ViewItem。

在下面的示例中,MyDashboardView含有两个ListView(图1),点击一个Action新加一个ListView(图2)。


图1


图2

//simpleAction1_Execute中的代码可放在ViewController的任意位置。

private void simpleAction1_Execute(object sender, SimpleActionExecuteEventArgs e)
        {
            

            string dashBoardId = "MyDashboardView";
            if (View.Id == dashBoardId)
            {
                string viewId = "MyObject_ListView";
//在DashboardView下Items中添加节点,节点类型为IModelDashboardViewItem
                IModelDashboardViewItem viewItem = ((IModelDashboardView)View.Model).Items.AddNode<IModelDashboardViewItem>();
//找到MyObject_ListView,并为该ViewItem的View属性赋值
                viewItem.View = Application.FindModelView(viewId);
//定位到Layout的Main布局,若还未创建则创建它
                IModelLayoutGroup mainLayoutGroup = ((IModelDashboardView)View.Model).Layout[ModelDetailViewLayoutNodesGenerator.MainLayoutGroupName] as IModelLayoutGroup;
                if (mainLayoutGroup == null)
                    mainLayoutGroup = ((IModelDashboardView)View.Model).Layout.AddNode<IModelLayoutGroup>(ModelDetailViewLayoutNodesGenerator.MainLayoutGroupName);
                IModelLayoutItem layoutItem = mainLayoutGroup[viewId] as IModelLayoutItem;
                if (layoutItem == null)
                {
//将新建的ViewItem添加到布局
                    layoutItem = mainLayoutGroup.AddNode<IModelLayoutItem>(viewId);
                    layoutItem.ViewItem = viewItem;
                    View.LoadModel();
                }
            }
}


此外,动态删除ViewItem也是可以的,这在我前两篇博客中已有说明。这里汇合附在最后(这些代码都在ViewController中):

删除方法1:真实地删除某ViewItem

DashboardView dv = View as DashboardView;
            foreach (ViewItem vi in dv.Items)
            {
                if (vi.Id == "yyyyyy")
                {
                    dv.RemoveItem(vi.Id);
                }
            }
删除方法2:并不真实地删除ViewItem,只是隐藏该ViewItem

DashboardView dv = View as DashboardView;
            DevExpress.XtraLayout.LayoutControl layoutControl =
               ((DevExpress.XtraLayout.LayoutControl)dv.Control);
            foreach (object obj in layoutControl.Items)
            {
                if (obj is DevExpress.XtraLayout.LayoutControlItem)
                {
                    DevExpress.XtraLayout.LayoutControlItem layoutControlItem =
                       (DevExpress.XtraLayout.LayoutControlItem)obj;
                    //layoutControlItem.Name由ViewItem的ID加括号和括号内的数字构成
                    //如:ViewItem的Id是‘myId’,可能其layoutControlItem.Name为‘myId(3)'
                    if (layoutControlItem.Name.StartsWith("myViewItemId" + "("))
                        layoutControlItem.HideToCustomization();
                }
            }



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值