SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(七):State

State的描述和实例

       State的作用和对象中的Property作用差不多,用于传递对象间的状态。

1.         创建一个Module,并命名为SCSF.Sample.StateModel

2.8.1

2.         作用需要传递的State需要在SHELL中进行初始化。

        protected override void BeforeShellCreated()

        {

            base.BeforeShellCreated();

 

            RootWorkItem.State["StateList"] = new List<string>();

 

 

        }

并且在Module启动时在Controller中添加以下代码给State赋初始值。

  public class ModuleController : WorkItemController

    {

      。。。

        private void AddViews()

        {

           addStateValue();

          。。。          

        }

 

        private void addStateValue()

        {

            List<string> statelist = (List<string>)WorkItem.RootWorkItem.State["StateList"];

            statelist.Add("one");

            statelist.Add("two");

            statelist.Add("three");

            statelist.Add("four");

 

        }     

    }

3.         View中定义方法操作State的值,并在Presenter类中处理State值的获取和设置。下面以其中一个视图的代码作为例子,先在视图otherView中输入如下代码:

  [SmartPart]

    public partial class otherView : UserControl, IotherView

{

     。。。

        #region IotherView 成员

 

        public void setStateTxt(string ss)

        {

            this.textBox1.Text = ss;

        }

 

        #endregion

 

        private void button1_Click(object sender, EventArgs e)

        {

            _presenter.setStateTxt();

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            _presenter.inputStateValue(this.textBox1.Text);

        }

    }

otherViewPresenter类中输入如下代码:

public class otherViewPresenter : Presenter<IotherView>

    {

        。。。

        [Microsoft.Practices.CompositeUI.State("StateList")]

        public List<string> states

        {

            set

            {

                if (value != null)

                {

                    states = value;

                }

            }

            get

            {

                return (List<string>)WorkItem.RootWorkItem.State["StateList"];

            }

        }

 

        public void setStateTxt()

        {

            string st = string.Empty;

            for (int i = 0; i < states.Count; i++)

            {

              

                st+= (string)states[i];

 

            }

            View.setStateTxt(st);

        }

 

        public void inputStateValue(string ss)

        {

            states.Add(ss);

        }

    }

其他两个视图也按同样的方式写好代码。

4.         完成后运行。

2.8.2

其中点击getState按钮会把初始值读取并放进显示框中,点击setState按钮则可在State值中增加对应信息。

 

2.8.3

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章