2017-09-25 19 views
0

我試圖從一個頁面傳遞參數到另一頁。這些傳遞的參數將用於從SQL表中進行選擇。 頁面構建如下:(後面的代碼)參數傳遞到雙擊手勢Xamarin窗體

private MainRoutePageViewModel mainroutepageviewmodel; 
private List<RouteInfo> routeinfo; 

構造:

public MainRoutePageViewDetail(MessagDatabase database) 
    { 
     InitializeComponent(); 

     BindingContext = mainroutepageviewmodel = new MainRoutePageViewModel(database,Navigation); 
     //_listOfProperties = mainroutepageviewmodel.GetLabelInfo(); 

     ScrollView scrollview = new ScrollView(); 

     StackLayout mainstack = new StackLayout(); 
     mainstack.Spacing = 0; 
     mainstack.Padding = 0; 

     //mainstack.HeightRequest = 2000; 

     routeinfo = mainroutepageviewmodel.GetLabelInfo(); 


     string _routePlacer = ""; 

     foreach (var i in routeinfo) 
     { 
      mainstack.Children.Add(NewRouteName(i.RouteName)); 


      mainstack.Children.Add(BuildNewRoute(i.RouteStops,i)); 


      _routePlacer = i.RouteName; 
     } 

     scrollview.Content = mainstack; 

     Content = scrollview; 


    }// end of constructor 

的BuildNewRoute方法:

public StackLayout BuildNewRoute(List<string> location, RouteInfo routeinfo) 
    { 

     StackLayout stackLayout = new StackLayout(); 

     //stackLayout.HeightRequest = 1000; 

     foreach (var i in location) { 

      StackLayout stackLayout2 = new StackLayout(); 
      stackLayout2.HeightRequest = 200; 

      Grid grid = new Grid(); 
      grid.ColumnSpacing = 0; 
      grid.RowSpacing = 0; 



      grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); 
      grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(15, GridUnitType.Star) }); 
      grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); 
      grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(20, GridUnitType.Star) }); 
      grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(20, GridUnitType.Star) }); 
      grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(20, GridUnitType.Star) }); 
      grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(20, GridUnitType.Star) }); 

      grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(55, GridUnitType.Star) }); 
      grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(18, GridUnitType.Star) }); 
      grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(18, GridUnitType.Star) }); 
      grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(18, GridUnitType.Star) });     
      grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(40, GridUnitType.Star) }); 
      grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(30, GridUnitType.Star) }); 
      grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(10, GridUnitType.Star) }); 
      grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(15, GridUnitType.Star) }); 
      grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(5, GridUnitType.Star) }); 


      TapGestureRecognizer ArrowtapGesture = new TapGestureRecognizer(); 
      ArrowtapGesture.Tapped += ArrowtapGesture_Tapped; 

      // Arrow icon 
      Image arrowimage = new Image(); 
      arrowimage.Source = "Resources/arrow.png"; 
      arrowimage.VerticalOptions = LayoutOptions.Center; 
      arrowimage.HorizontalOptions = LayoutOptions.Center; 
      arrowimage.GestureRecognizers.Add(ArrowtapGesture); 
      grid.Children.Add(arrowimage,7,6); 

      // total weight labels 
      Label weightlabel = new Label(); 
      weightlabel.Text = "Total Weight [kg]: "; 
      grid.Children.Add(weightlabel,1,5,3,4); 

      // total items labels 
      Label itemsLabel = new Label(); 
      itemsLabel.Text = "Total Items: "; 
      grid.Children.Add(itemsLabel, 1, 5, 4, 5); 

      // underline labels 
      Label firstunderline = new Label(); 
      Label secondunderline = new Label(); 

      firstunderline.BackgroundColor = Color.Black; 
      secondunderline.BackgroundColor = Color.Black; 
      grid.Children.Add(firstunderline,0,9,0,1); 
      grid.Children.Add(secondunderline,0,9,2,3); 

      // address label 
      Label labelLocation = new Label(); 
      labelLocation.Text = i; 
      grid.Children.Add(labelLocation, 0, 3); 

      //sequence label 
      Label sequencelable = new Label(); 
      sequencelable.Text = "Sequence: "; 
      sequencelable.VerticalTextAlignment = TextAlignment.Center; 
      grid.Children.Add(sequencelable, 0, 1); 

      // slot label 
      Label slotlabel = new Label(); 
      slotlabel.Text = "ETA/Slot: "; 
      slotlabel.VerticalTextAlignment = TextAlignment.Center; 
      grid.Children.Add(slotlabel,1,4,1,2); 

      // time label 
      Label timelabel = new Label(); 
      timelabel.Text = "Time: "; 
      timelabel.VerticalTextAlignment = TextAlignment.Center; 
      grid.Children.Add(timelabel, 4, 5,1,2); 

      // Status label 
      Label statuslabel = new Label(); 
      statuslabel.Text = "Status: "; 
      statuslabel.VerticalTextAlignment = TextAlignment.Center; 
      grid.Children.Add(statuslabel, 5, 6,1,2); 

      //start button 
      Button startbutton = new Button(); 
      startbutton.Text = "Pending"; 
      startbutton.BackgroundColor = Color.Gray; 
      grid.Children.Add(startbutton,5,8,4,6); 

      // Phone book image 
      Image bookImage = new Image(); 
      //bookImage.BackgroundColor = Color.White; 
      bookImage.Source = "Resources/phoneWithBook.png"; 
      bookImage.VerticalOptions = LayoutOptions.Center; 
      bookImage.HorizontalOptions = LayoutOptions.Center; 
      grid.Children.Add(bookImage,1,2,6,7); 


      //Globe image 
      Image GlobeImage = new Image(); 
      // GlobeImage.BackgroundColor = Color.White; 
      GlobeImage.Source = "Resources/globe.png"; 
      GlobeImage.VerticalOptions = LayoutOptions.Center; 
      GlobeImage.HorizontalOptions = LayoutOptions.Center; 
      grid.Children.Add(GlobeImage, 2, 3, 6, 7); 


      stackLayout2.Children.Add(grid); 

      stackLayout.Children.Add(stackLayout2); 
     } 

     return stackLayout; 
    } 

正如你可能會看到它遍歷一個列表收集數據並將網格和標籤添加到主StackLayout。 這不是頁面建築工程罰款的問題。

你能看到的是,具有連接到它輕拍姿態的箭頭圖標圖像。此輕擊手勢使用視圖模型打開下一頁。

點擊手勢:

private async void ArrowtapGesture_Tapped(object sender, EventArgs e) 
    {   

     await mainroutepageviewmodel.OpenStopDetail(); 
    } 

而且OpenStopDetail方法:

public async Task OpenStopDetail() 
    { 
     await Navigation.PushAsync(new StopDetailPageView()); 

    } 

我想知道如何通過對StopDetailView頁傳遞從水龍頭事件參數。 特別是來自序列標籤的文字。

有些事情,我都試過了,一直使用自來水事件的鑄造但這似乎被綁定到所選擇的項目。換句話說,它給我訪問圖像屬性。這對我的情況沒有好處。

我似乎無法找到一種方法來訪問每一個標籤屬性作爲參數傳遞。對不起,如果這不明確,很難解釋。讓我知道是否需要更多細節。

回答

0

Tapped事件的發件人將是手勢識別器附加的控件 - 在您的情況下,圖像。因此,您可以將數據添加到Image的某個屬性中,以便從您的事件處理程序中訪問它。

// assign parameter to ClassId (must be a string) 
arrowimage.ClassId = "blah"; 
arrowimage.GestureRecognizers.Add(ArrowtapGesture); 

private async void ArrowtapGesture_Tapped(object sender, EventArgs e) 
{   
    // retrieve parameter from sender's ClassId 
    var parm = ((Image)sender).ClassId; 
    await mainroutepageviewmodel.OpenStopDetail(); 
} 
+0

的偉大工程。謝謝 – user3355961