将用户控件设置为监听底层类库中的更新
本文关键字:类库 更新 监听 用户 控件 设置 | 更新日期: 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请求来处理购物车。从客户机(浏览器),您将需要向后端服务提交一些数据。当发布数据时,你需要为成功/失败定义回调函数。您需要在这个回调中刷新您的购物车。
遵循本教程,它会给你一个很好的想法,你需要做什么来完成这个