Реализация шаблона наблюдателя для выполнения метода в классе

#c# #.net #.net-2.0 #c#-2.0 #asp.net-2.0

#c# #.net #.net-2.0 #c #-2.0 #asp.net-2.0

Вопрос:

Я использую c # [ASP.NET 2.0 — VS 2005] и я хочу реализовать шаблон наблюдателя для запуска метода (находящегося в классе) при изменении выпадающего индекса. Есть три выпадающих списка и элемент управления Label, который должен отображать вновь сгенерированный код схемы в режиме реального времени по мере изменения индекса выпадающего списка.

 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();
        }
    }

}
 

Комментарии:

1. C # имеет реализацию шаблона наблюдателя

2. Я хочу мира во всем мире, но это не вопрос. В чем ваш вопрос? Что вы пробовали? На чем ты застрял?

3. Я четко упомянул, где я застрял. В любом случае, я хочу вызвать метод GetNewSchemeCode() при изменении любого свойства.

4. @RPK — Извините, все еще не вижу этого. Возможно, вам потребуется предоставить более подробную информацию.

5. Вы не запускаете PropertyChanged . Я согласен, что вопрос не ясен.

Ответ №1:

Сделайте что-то вроде приведенного ниже кода, чтобы подключить свойство selected index, измененное в выпадающем списке. Это Asp.Net я полагаю, что это реализация шаблона Наблюдателя за кулисами. Вы можете установить свойство AutoPostBack и подключение события либо в коде, либо в разметке html.

 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 # заменил шаблон Observer, у него есть события; события — это реализация шаблона Observer на уровне языка. Что вы хотите сделать, это создать событие для вашего объекта, а затем заставить ваших наблюдателей подписаться на него.