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