本帖最后由 kiba518 于 2012-01-16 10:07:23 编辑

解决方案 »

  1.   


        private EventHandler updateHandler0;//声明一个委托 
                   //这是声明了一个事件,不是传统委托     public Part()
          {
                InitializeComponent();
                updateHandler0 += new EventHandler(AddComplete0);//委托给一个函数 
                                      // 这是事件激发触发的方法    
          }// click 事件中
      private void btnCreate_Click(object sender, RoutedEventArgs e)
            {
    AddChildWindow = new AddChildWindow(updateHandler0);//把委托传给了Childwindow  事件
    }//childwindow中 构造函数里
    private EventHandler handler;//刷新父页面
    public AddChildWindow (EventHandler handler)
            {
                InitializeComponent();
                this.handler = handler;//初始化子窗体的事件
             } 
    //还有这个函数是什么意思 
    private void Update_Completed(object sender, EditNoticeEventArgs e)
            {
                handler(null, null);//这是什么   更新完成后 调用这个事件
            }个人感觉 这个代码实现的咋这么别扭
    大体猜测流程  父窗体打开了一个子窗体---->子窗体进行一系列操作触发一个事件---->父窗体更新
      

  2.   

    Handler就是中间的类似函数指针的变量,用来传递函数的,最终执行的是AddComplete0这个函数。
      

  3.   

    看Observer(观察者) 模式看你的代码,需求应该就是childwindow中会更新,但是父窗口需要在更新后做些什么事情,因此使用了委托。
    但是我感觉代码有点问题,好像private EventHandler updateHandler0;//声明一个委托并不需要似的。
      

  4.   

    代码是你一个人写滴,所以你分清楚这里面的关系建设你把代码看成是两个人写滴。你就明白这个关系了。这就像一盘棋,如果就你一个下,那怎么下都成,都是你一个人控制如果是两个下,你下玩了,就把控制权教给别人了,然后对方下了,你在把控制权交给你
    这样把,你就把调用方的代码给“黑”掉你只考虑你自己的代码
     下棋 

       while(棋局没结束)
      {思考棋子状态,决策自己怎么下
         然后我下一个颗子
        xxx()//xxx委托,他控制权交给对方
       }
     }xxx就是把控制权交给对方,我写这个代码,根本不管对方怎么处理,就想你上面的东西,我只是把控制权交出去,并把对方需要的环境参数(比如棋盘)送过去,至于对方是刷新,还是入库,还是修改某个状态,和我不管
      

  5.   

    同样 个人认为private EventHandler updateHandler0 这个是多余的东西其实并不需要
      

  6.   

    把那些杂七杂八的东西去掉,我把父页面的委托啥啥都去掉,我们来看一下
    //去掉updateHandler0这个干扰项,直接匿名方法
    AddChildWindow = new AddChildWindow(()=>{匿名方法,告诉子窗口,你下完子了请把,棋盘换给我,我要还要下});
    private void Update_Completed(object sender, EditNoticeEventArgs e)
    {
             if(handler!=null) //handler!=null 表示父窗口说请在下玩子后通知他
                handler(null, null);//通知父窗口把控制权交给父窗口处理,发送着为null,环境参数为null,
    }
      

  7.   

    AddChildWindow = new AddChildWindow(()=>{匿名方法,告诉子窗口,你下完子了请把,棋盘换给我,我要还要下});
    这个匿名方法 没有传参数啊
    那 子窗体中 怎么获取 handler这个委托呢 
      

  8.   

    AddChildWindow = new AddChildWindow((new EventHandler )=>{匿名方法,告诉子窗口,你下完子了请把,棋盘换给我,我要还要下});
    是不是这样写
      

  9.   

    AddChildWindow = new AddChildWindow((EventHandler handler)=>{
      

  10.   

    事件的匿名是new AddChildWindow((mysernder,mye)=>{
    我要做的事情}}