设置用户控件以侦听基础类库中的更新

时间:2011-11-21 15:40:56

标签: c# asp.net

好的,所以我有一个用户控件,它使用底层业务逻辑类的值。我需要一些方法让用户控件监听类并在调用某些方法/在BL类上更新值时触发。

在高层次上,最好的方法是什么?我知道在BL类中需要某种形式的事件,我的用户控件中有一个监听器,但是如果有人有任何建议的话,只是想知道最好的方法吗?

3 个答案:

答案 0 :(得分:2)

应该监听的类必须实现INotifyPropertyChanged接口,而usercontrol必须订阅它。让我给你看一个简短的样本。这是一个具有属性并且通常会对其进行更改的类:

public class MyClass : INotifyPropertyChanged
{
    private string myProperty;
    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        var temp = PropertyChanged;
        if (temp != null)
        {
            temp(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public string MyProperty
    {
        get { return myProperty; }
        set
        {
            if (myProperty != value)
            {
                myProperty = value;
                RaisePropertyChanged("MyProperty");
            }
        }
    }
}

您的usercontrol应订阅PropertyChange事件,并会在每次更改时收到通知。

答案 1 :(得分:1)

这就是事件的用途。

Here's a good tutorial on Events.

基本上,您将在商务舱中创建一个活动:

public event EventHandler MyEvent;

当事情发生时(也在您的商务舱中)举起活动:

if(MyEvent != null) MyEvent(this, EventArgs.Empty);

事件的参数将根据事件的类型而有所不同。

在您的消费者类中,您订阅了这样的事件“

MyEvent += new EventHandler(MyMethod);

public void MyMethod(object sender, EventArgs e) { }

// OR

MyEvent += delegate(object sender, EventArgs e) { };

答案 2 :(得分:1)

嗯,通常BL对象是服务器端,而你的'用户控件'将在客户端。 更改BL对象到达连接的客户端比仅仅简单的事件更复杂。 您需要让您的服务器能够联系您的客户。为此,您需要使用一些技术,如长轮询或套接字。

*编辑* 我过去曾使用WebSync来满足这些需求。这是一种商业产品。你可能想看看SignalR。这是斯科特H关于它的一个伟大的blog post。这是开发的,而不是新的开源,但我还没有使用它。

*编辑2 * 现在我明白了你在找什么。您需要使用Ajax请求来处理您的购物车。从客户端(浏览器),您需要向后端服务提交一些数据。发布数据时,您需要定义成功/失败的回调函数。您需要在此回调中刷新购物车。

按照这个tutorial,它会让你很清楚你需要做些什么来实现这个目标