太白将进酒,共邀天下友

形位合成变动静,有无陈新映全域。 内外移思抽精明,连续离散归终果。

导航

[导入]Composite UI Application Blocks 点滴(一)

Composite UI Application Blocks 点滴(一)
 前段时间学习了一下CAB,在正式的运用的时候还是出现了一些问题。在这里记录一下,供大家参考。

(1)SmartPart加载问题
 都怪我没有看清E文的说明,在labs的代码中相应的地方作了说明——如果加载的窗体上有SmartPartHolder的话,并且要在主窗体加载的时候显示相应的SmartPart,应在WorkItem 的Run方法中,在Show出主窗体之前应该,先Creat Smartpart。代码如下:

public void Run(IWorkspace workspace) { //先Create 相应的SmartPart Create<CustomerQueueView>("CustomerList"); mainView = Create<BankTellerMainView>(); //再Show主窗体 workspace.Show(mainView); }

 

(2)在 State 中存放数据
 State中就像Asp.net中的Session一样好用,并且只在WorkItem的范围中有效。但是使用的方式有点不同。

        //在workItem的类中这么写是可以的。         public MedicalCase PatientMedicalCase { get { return (MedicalCase)State["patientMedicalCase"]; } set { State["patientMedicalCase"] = value; } }        //在其他的类中比如Controler或是View中,利用Attribute来使用State中的值        [State("patientMedicalCase")] private MedicalCase patientInfo = null ;

 

(3)使用EventBroker(事件代理)
 这个真是个好东西,让触发事件和处理事件的两个类彻底解耦——两个类之间根本就不需要知道对方的存在。同时也为我们框架提供了很好的思路,并引入了这种机制,让结构变得更加优雅。EventBroker使用的方法如下:

//在A类中定义事件,和它的Key“topic://SmartClient/Status1Update”,后面再指定一下事件的广播范围 [EventPublication("topic://SmartClient/Status1Update", EventScope.Global)] public event EventHandler<DataEventArgs<string>> UpdateStatusTextEvent; //在B类中处理事件 [EventSubscription("topic://SmartClient/Status1Update", EventScope.Global,
         Thread = ThreadOption.UserInterface)] public void OnStatusUpdate(object sender, DataEventArgs<string> e) { toolStripStatusLabel1.Text = e.Data; }

 

(4)WorkItem嵌套
 在CAB中一个WorkItem和一个用例对应,用例就相当一个类,一个用例发生一次,就会实例化一次用例(实例化一次WorkItem).所以会出现一个workItem中会有许多子WorkItem(子用例),这样可以提高界面的响应速度,当然也需要在必要的事情清理掉短时间内不会再用刀到的WorkItem。以免内存占用过多。


文章来源:http://www.agilelabs.cn/blogs/wind_tower/archive/2006/01/11/507.aspx

posted on 2006-01-16 10:24  太白飞仙  阅读(218)  评论(0编辑  收藏  举报