实现观察者模式以执行类中的方法
Posted
技术标签:
【中文标题】实现观察者模式以执行类中的方法【英文标题】:Implementing Observer Pattern to execute a method in a class 【发布时间】:2011-10-23 07:09:53 【问题描述】:我正在使用 c# [ASP.NET 2.0 - VS 2005],并且我想实现观察者模式以在 DropDown 索引更改时触发方法(驻留在类中)。共有三个 DropDown 和一个 Label Control,当 DropDown 索引发生变化时,它们应该实时显示新生成的方案代码。
public sealed class GetSchemeCode:INotifyPropertyChanged
private string _distCode;
private string _blockCode;
private string _schmType;
public string DistCode
get return _distCode;
set _distCode = value;
public string BlockCode
get return _blockCode;
set _blockCode = value;
public string SchemeType
get return _schmType;
set _schmType = value;
public GetSchemeCode()
//
// TODO: Add constructor logic here
//
protected string GetNewSchemeCode()
SqlCommand cmdSchmCode = new SqlCommand("GenerateSchemeCode", dbConnection.cn);
try
cmdSchmCode.CommandType = System.Data.CommandType.StoredProcedure;
//Add Parameters
cmdSchmCode.Parameters.AddWithValue("@districtCode", DistCode.ToString());
cmdSchmCode.Parameters.AddWithValue("@blockCode", BlockCode.ToString());
cmdSchmCode.Parameters.AddWithValue("@schemeType", SchemeType.ToString());
dbConnection.OpenConnection("Scheme");
return cmdSchmCode.ExecuteScalar();
catch (Exception)
throw;
finally
cmdSchmCode.Dispose();
dbConnection.CloseConnection();
【问题讨论】:
C# 有一个观察者模式实现 我想要世界和平,但这不是问题。你有什么问题?你试过什么?你被什么困住了? 我已经清楚地提到了我卡在哪里。无论如何,我想在任何属性更改时调用 GetNewSchemeCode() 方法。 @RPK - 抱歉,还是看不到。您可能需要提供更多详细信息。 你不会开火PropertyChanged
。我同意这个问题不清楚。
【参考方案1】:
执行下面的代码来连接下拉列表的选定索引更改属性。我相信这就是 Asp.Net 在幕后对观察者模式的实现。您可以在代码或 html 标记中设置 AutoPostBack 属性和事件连接。
public GetSchemeCode()
DistCodeDropDownList.AutoPostBack = true;
DistCodeDropDownList.SelectedIndexChanged += new EventHandler(DistCodeDropDownList_SelectedIndexChanged);
// TODO: Hook up the other DropDownLists here. as well
void DistCodeDropDownList_SelectedIndexChanged(object sender, EventArgs e)
CodeOutputLabel.Text = GetNewSchemeCode();
【讨论】:
【参考方案2】:C# 已经取代了观察者模式,它有事件;事件是观察者模式的语言级实现。您要做的是在您的对象上创建一个事件,然后让您的观察者订阅它。
【讨论】:
以上是关于实现观察者模式以执行类中的方法的主要内容,如果未能解决你的问题,请参考以下文章