0

我有一个导航控制器来显示桌子上的项目列表,然后我需要触摸一个项目来显示该项目的详细信息。

这是我如何填写表格的代码:

public void SearchHotel (){

    Hotel hotel = new Hotel();
    var distribution = new HotelDistribution[]{new HotelDistribution(){ Adults = 1, Children = 0, ChildrenAges = new int[0]} };
    var items = hotel.SearchHotels(Convert.ToDateTime("2013-08-08"),Convert.ToDateTime("2013-09-09 "),"(MIA)", distribution,"","","",0);


    data = new List<DtoHotelinformation>();

    foreach (var item in items)
    {
        DtoHotelinformation DtoHotelinformation = new DtoHotelinformation();
        DtoHotelinformation.code  = item.Code.ToString();
        DtoHotelinformation.price  = item.Price.ToString();
        DtoHotelinformation.title =  item.Name.ToString().ToTitleCase();
        DtoHotelinformation.subtitle = item.Address.ToString();
        DtoHotelinformation.rating  = item.Rating.ToString();
        DtoHotelinformation.imageUlr = item.ImageUrl;

        data.Add(DtoHotelinformation);
    }

    hud.Hide(true);
    hud.RemoveFromSuperview();
    HotelSearchTable.Source = new HotelTableSource(data.ToArray());
    HotelSearchTable.ReloadData();

}

因为我使用情节提要来显示详细信息视图控制器,所以我的表格源中有以下代码:

public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{

    if (RowTouched != null) {
        RowTouched (this, EventArgs.Empty);
    }
    tableView.DeselectRow (indexPath, true); // normal iOS behaviour is to remove the blue highlight
}

回到我的视图控制器,我调用 RowTouched 来显示细节控制器,如下所示:

public override void ViewDidAppear (bool animated) {
    base.ViewDidAppear (animated);
    SearchHotel ();

    var source = new HotelTableSource(data.ToArray());
    var detail = Storyboard.InstantiateViewController("HotelDetailScreen") as  iPhoneHotelDetailViewController;
    source.RowTouched += (sender, e) => {
        this.NavigationController.PushViewController(detail, true);

    };
    HotelSearchTable.Source = source;

}

但是我需要传递在桌子上触摸的项​​目的信息才能显示详细信息。我真的不知道我该怎么办?

注意:我不能使用 PrepareForSegue,因为控制器之间没有 segue。

提前致谢

4

2 回答 2

0

将数据传递给事件处理程序正是 EventArgs 参数的用途。

创建一个继承自 EventArgs 并具有所需数据属性的类:

public class HotelSelectedEventARgs : EventArgs
{
  public DTOHotelInformation HotelInfo { get; set; }
}

然后,当您在 RowSelected 中调用处理程序时,不要传递空的 EventArgs,而是创建自定义类的实例并将所选数据分配给 HotelInfo 属性。

于 2013-08-06T00:30:10.533 回答
0

如果你愿意,你可以在你的 Row Selected 事件中,在你的表数据源中获取你的 UINavigationController。

从那里你可以推送你的新 ViewController。

“Row_Selected”中的 [indexPath.Row] 应该告诉您用户选择了数组或列表中的哪个元素。

UINavigationController navcontroller =(UINavigationController)UIApplication.SharedApplication.Windows[0].RootViewController;
于 2013-08-05T19:45:23.563 回答