2

当用户单击按钮时,将激活以下事件:

flightWindow.SendAirplaneLand += onAirplaneStartSend; 
flightWindow.SendAirplaneTakeOff += onAirplaneTakeOffSend;
flightWindow.SendAirplaneChangeRoute += onAirplaneChangeRouteSend;

他们都调用不同的方法将信息添加到列表中:

public void onAirplaneStartSend(object sender, Land e)
    {
        listBoxFlightEvents.Items.Add(e.LandStatus);
    }

    public void onAirplaneTakeOffSend(object sender, TakeOff e)
    {
        listBoxFlightEvents.Items.Add(e.TakeOffStatus);
    }

    public void onAirplaneChangeRouteSend(object sender, ChangeRoute e)
    {
        listBoxFlightEvents.Items.Add(e.ChangeRouteStatus);
    }

我的问题是我想将所有这些信息带到一行文本中以添加到列表中,我正在寻找一个简单的解决方案如何做到这一点?

一种方法是让方法返回一个字符串并将所有返回字符串值的字符串放在一起,然后将其添加到列表中,如下所示:

public string onAirplaneStartSend(object sender, Land e)
    {
        return e.LandStatus;
    }

但他的可能是不可能的,也不方便?

4

1 回答 1

3
flightWindow.SendAirplaneLand += (s,e) => {
  OnAirplaneStatusChange(e.LandStatus);
};
flightWindow.SendAirplaneTakeOff += (s,e) => {
  OnAirplaneStatusChange(e.TakOffStatus);
};
flightWindow.SendAirplaneChangeRoute += (s,e) => {
  OnAirplaneStatusChange(e.ChangeRouteStatus);
};

private void OnAirplaneStatusChange(string status)
{
  listBoxFlightEvents.Items.Add(status);
}

虽然我仍然不完全确定你要做什么。除非Land, TakeOffand ChangeRouteall 继承了一些共同的(例如)AirplaceEventArgs(以及表示状态的共同属性),否则您必须单独绑定它们。最好的情况是使用通用EventArgs方法,但您需要以某种方式强制转换以获得LandStatus,TakeOffStatusChangeRouteStatus值。

我建议:

public class AirplaneEventArgs : EventArgs
{
  public string Status { get; set; }
}
public class TakeOffEventArgs : AirplaneEventArgs
{
  /* other properties */
}
public class LandEventArgs : AirplaneEventArgs
{
  /* other properties */
}
public ChangeRouteEventArgs : AirplaneEventArgs
{
  /* other properties */
}

然后你可以简单地绑定:

flightWindow.SendAirplaneLand += OnAirplaneStatusChange; 
flightWindow.SendAirplaneTakeOff += OnAirplaneStatusChange;
flightWindow.SendAirplaneChangeRoute += OnAirplaneStatusChange;

private void OnAirplaneStatusChange(object sender, AirplaneEventArgs e)
{ 
    // they all now share "Status" proeprty so no need to cast to
    // get "LandStatus" vs. "ChangeRouteStatus" vs. "TakeOffStatus"
    // values.
    listBoxFlightEvents.Items.Add(e.Status);
}
于 2012-08-10T18:49:26.040 回答