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