在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();
}
}
}
删除方法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();
}
}