【问题标题】: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。我同意这个问题不清楚。

标签: c# .net .net-2.0 c#-2.0 asp.net-2.0


【解决方案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# 已经取代了观察者模式,它有事件;事件是观察者模式的语言级实现。您要做的是在您的对象上创建一个事件,然后让您的观察者订阅它。

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2013-12-09
      相关资源
      最近更新 更多