Dashbord View是一种较特殊的View,它可以在一个Frame里紧密地显示多个View。
DashboardView中的每个View由一个DashboardViewItem表示。在Application Model中DashboardViewItem节点下的IModelDashboardViewItem.View属性对应了该DashboradViewItem。当一个DashboradView需要在UI中显示出来时,会调用它的View.CreateControls方法。该方法会为每个DashboardViewItem创建一个内嵌的Frame,使用该Frame来显示VitemItem的View。注意,DashboradView支持很多种ViewItem: StaticText, StaticImage, ActionContainerViewItem........
DashboradViewItem: 指定其View属性为Bussiness Class的ListView或DetailView,显示相应的内容;
ActionContainerViewItem: 一个Action的容器;
StaticText:纯文本;
StaticImage:图片;
PropertyEditor:;
ControlDetailItem:;
若需要在代码中使用DashboardView,需要Frame.View或ViewController.View属性。使用DashboardView的CompositeView.Items, CompositeView.AddItem, CompositeView.RemoveItem, CompositeView.InsetItem方法。CompositeView类是DashboardView的基类,它还有一个后裔类DetailView。
下面是个简单的例子,在一个DashboradView中显示两个ListView,一个DetailView和一个ActionContainer
在Application Model的View节点下,添加一个DashboardView,然后再下面添加4个DashboardViewItem
具体过程参考xaf帮助文档。
若要访问该DashboardView,需要定义一个ViewController,并将这个ViewController的TargetViewId设为DashboardView的ID
代码中访问:
private void DViewController1_Activated(object sender, EventArgs e)
{
DashboardView dv = View as DashboardView;
Console.WriteLine("DashboardView is null? " + (dv == null));
if (dv != null)
{
//查找到某个DashboardViewItem
ViewItem povi=dv.FindItem("PersistentObject1");
if (povi != null)
{
//操作数据
ObjectSpace os=povi.View.ObjectSpace as ObjectSpace;
IList<BusinessObjects.PersistentObject1> obj = os.GetObjects<Solution4.Module.BusinessObjects.PersistentObject1>();
foreach (BusinessObjects.PersistentObject1 xx in obj)
{
PrintLine(xx.FullName);
}
}
//删除一个ViewItem
dv.RemoveItem(dv.FindItem("DashboardViewNavActionContainer").Id);
foreach (ViewItem vi in dv.Items)
{
//打印的Type都是DashboardViewItem
Type oot= vi.ObjectType;
string t = vi.GetType().Name;
PrintLine( "Type: " + t + " id: " + vi.Id);
}
}
}
private void PrintLine(string message)
{
Console.WriteLine(message);
}
另外,使用Application Model创建DashboardView参考在线XAF帮助文档: http://documentation.devexpress.com/#Xaf/CustomDocument3296