0

Bonjour, c'est la première fois que j'utilise Xamarin. Ce que j'essaye de faire est de modifier cette application pour utiliser ListView, mais d'abord je voudrais apprendre comment obtenir une valeur d'un pas à pas et l'imprimer à l'étiquette. Je sais que movieamount envoie la valeur sélectionnée au stepper et l'envoie au texte totalLabel, mais je n'arrive pas à comprendre comment l'envoyer à l'étiquette avec 0 et que je le change quand il est sélectionné. Il renvoie la quantité correcte sélectionnée mais n'imprime jamais à l'écran. méthode une "force brute" -Envoyer la valeur à l'étiquette de Stepper Xamarin.form

public static string movieamount; 
    public static string pickmovie; 
    public static string paymentSelected; 
    public static string dateSelected; 
    public static string timeSelected; 
    public static string totalLabel; 



    public MainPage() 
    { 

     Picker picker = new Picker 
     { 
      Title = "Movies", 

      VerticalOptions = LayoutOptions.CenterAndExpand 
     }; 


     var options = new List<string> { "Kill Bill", "Matrix", "Zombieland", "The Dark Knight", "Terminator", "Apocalypse Now", "Resouvoir dogs", "Horrible Bosses", "The Breakup", "Wedding Crashers", }; 
     picker.SelectedIndexChanged += (sender, e) => 
     { 
      pickmovie = picker.Items[picker.SelectedIndex]; 

     }; 
     foreach (string optionName in options) picker.Items.Add(optionName); 
     //listView.ItemTapped += async (sender, e) => { await DisplayAlert("Tapped", e.Item.ToString() + " was selected.", "OK"); ((ListView)sender).SelectedItem = null; }; 
     //this.Content = listView; 

     Label valuelabel = new Label 
     { 
      Text = "0", 
      FontAttributes = FontAttributes.Bold, 
      FontSize = 30, 
      HorizontalOptions = LayoutOptions.Center 
     }; 

     Stepper stepper = new Stepper 
     { 
      Minimum = 0, 
      Maximum = 10, 
      Increment = 1, 
      HorizontalOptions = LayoutOptions.Center, 
      VerticalOptions = LayoutOptions.CenterAndExpand 

     }; 


     stepper.ValueChanged += (sender, e)=> 
     { 

      movieamount = stepper.Value.ToString(); 

     }; 



     Picker payment = new Picker 
     { 
      Title = "Payment Method", 
      VerticalOptions = LayoutOptions.CenterAndExpand 

     }; 
     var options1 = new List<string> {"Visa", "MasterCard", "AmericanExpress", "Free",}; 

     foreach (string optionName in options1) payment.Items.Add(optionName); 
     payment.SelectedIndexChanged += (sender, e) => 
     { 
      paymentSelected = payment.Items[payment.SelectedIndex]; 
     }; 

     //TimePicker was here 



     Label totalLabel = new Label 

     { 

      HorizontalOptions = LayoutOptions.CenterAndExpand, 
      FontSize = 40, 
      FontAttributes = FontAttributes.Bold | FontAttributes.Italic 


     }; 

     DatePicker datePicker = new DatePicker 
     { 
      Format = "D", 
      VerticalOptions = LayoutOptions.CenterAndExpand, 

     }; 

     //---Handle Inline--- 

     datePicker.DateSelected += (object sender, DateChangedEventArgs e) => 
     { 
      //eventValue.Text = e.NewDate.ToString(); 
      dateSelected = e.NewDate.ToString(); 

     }; 

     TimePicker timePicker = new TimePicker 

     { 
      Format = "T", 
      VerticalOptions = LayoutOptions.CenterAndExpand 

     }; 
     // set inline handler 

     timePicker.PropertyChanged += (sender, e) => 
     { 
      if (e.PropertyName == TimePicker.TimeProperty.PropertyName) 

      { 
       timeSelected = timePicker.Time.ToString(); 
      }; 

     }; 

     Button button = new Button 

     { 
       Text = "Submit", 

       FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Button)), 
       HorizontalOptions = LayoutOptions.CenterAndExpand, 
       VerticalOptions = LayoutOptions.Fill 

     }; 

     button.Clicked += (sender, args) => 
     { 
      totalLabel.Text = "You have ordered " + movieamount + " " + 
      pickmovie + " \n You will be paying with " + paymentSelected + " " + 
      "Your delivery will be delivered at " + dateSelected + " " + timeSelected; 


     }; 





     StackLayout stackLayout = new StackLayout 
     { 
      Children = 

      { 
       picker, 
       payment, 
       valuelabel, 
       stepper, 
       datePicker, 
       totalLabel, 
       timePicker, 
       button, 


      } 

     }; 
     BackgroundColor = Color.Yellow; 
     this.Content = stackLayout; 
    } 
} 

}

Répondre

0

C'est une façon de l'aborder. En option, vous pouvez utiliser MVVM et databinding, mais qui est plus avancé et peut-être plus que vous voulez mordre à ce point

// declare this method outside of the constructor 
private void UpdateLabel() { 

    totalLabel.Text = "You have ordered " + movieamount + " " + 
    pickmovie + " \n You will be paying with " + paymentSelected + " " + 
    "Your delivery will be delivered at " + dateSelected + " " + 
    timeSelected; 
} 

// then modify these existing handlers to call UpdateLabel 
stepper.ValueChanged += (sender, e)=> 
{ 
    movieamount = stepper.Value.ToString(); 
    UpdateLabel(); 
}; 

// you should also call UpdateLabel in the other handlers that update values 
button.Clicked += (sender, args) => 
{ 
    UpdateLabel(); 
}; 
0

ok. Je vais essayer cela et expirer avec elle. J'ai été capable de trouver ma réponse avec cette ligne de code. Que je suis entré juste après stepper.ValueChanged + = (expéditeur, e) =>

valuelabel.Text = String.Format(" {0:F1}", e.NewValue);