将用户控件设置为监听底层类库中的更新

本文关键字:类库 更新 监听 用户 控件 设置 | 更新日期: 2023-09-27 18:15:15

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

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

将用户控件设置为监听底层类库中的更新

应该被监听的类必须实现INotifyPropertyChanged接口,并且用户控件必须订阅它。让我给你看一个简短的例子。下面是一个类,它有一个属性,并通知它的变化:

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事件,并在每次更改时收到通知。

这就是事件的作用。

这是一个关于事件的很好的教程。

基本上你将在你的业务类中创建一个事件:

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

嗯,通常情况下,BL对象活在服务器端,而你的"用户控制"将在客户端。将BL对象的更改传递到已连接的客户端要比简单的事件复杂得多。您将需要您的服务器能够联系您的客户端。为此,您需要使用一些技术,如长轮询或套接字。

* EDIT *我过去曾使用过WebSync来满足这些需求。但这是一种商业产品。你可能想看看SignalR。这是Scott H的一篇很棒的博客文章。这是在开发中,相当新的,开源的,但我没有使用过它。

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

遵循本教程,它会给你一个很好的想法,你需要做什么来完成这个