2011-11-21 24 views
1

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

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

+1

你要显示给客户翻动书页已被渲染后?例如,沿着显示现场体育比分/现场股票代码等等的线条......否则我觉得在asp.net应用程序中有这样的回调是很奇怪的。 – santiagoIT

+0

是的,它是通知对同一页面上不同控件所做更改的控制权,这些控件都依赖于业务层中的相同模型数据。假设你有一些类似于亚马逊的地方,你可以在主篮子里增加篮子物品。你也有一个迷你篮子。当您更改主篮子中的商品数量时,我希望这种更改也反映在迷你篮子中。为此,我希望能够让迷你篮子倾听BL中潜在模型的变化,并且还能够在屏幕上更新自己的客户端。 – geoid

+0

看更新后的答案 – santiagoIT

回答

2

类的事件应听取必须实现INotifyPropertyChanged界面和用户控件必须订阅。让我告诉你。很短的简单示例下面是有一个属性和notifiy改变它的一类:

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

你的用户控件应该订阅的PropertyChange事件,将在每一个变化通知

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

嗯,通常BL对象在服务器端,而你的'用户控制'将在客户端。 对连接客户端的BL对象进行更改远不止一个简单事件。 您需要让您的服务器能够与您的客户联系。为此,您需要使用一些技术,如长轮询或套接字。

*编辑* 我以前用WebSync这样的需求。尽管如此,这是一个商业产品。你可能想看看SignalR。这是Scott H关于它的一个很棒的blog post。这是开发中,而不是新的开源,但我没有使用它。

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

按照此tutorial,它会给你的,你需要做的,达到什么好主意这个

+0

BL对象不会“正常”活在一个单独的服务器上,而不是asp.net中的用户控件。除非你打电话给web服务,否则一个简单的事件就足够了。 –

+1

我仍然相信他希望将BL中的变化反映在客户端。否则,当用户控件准备渲染数据时,它只会查询BL对象的当前状态。不需要有回拨系统。 – santiagoIT

+0

@santiagoIT - 是的,你是对的。假设你有一些类似于亚马逊的地方,你可以在主篮子里增加篮子物品。你也有一个迷你篮子。当您更改主篮子中的商品数量时,我希望这种更改也反映在迷你篮子中。为此,我希望能够让迷你篮子倾听BL中潜在模型的变化,并且还能够在屏幕上更新自己的客户端。 – geoid