2016-09-30 2 views
0

Я использую основное приложение WPF. В нем есть список людей с несколькими свойствами. Когда я запускаю приложение, он заполняет список с Лицами. У меня есть кнопка для случайных лиц, основанных на выборе (1-5). Когда это произойдет, мне нужно удалить этого Person/s и переместить его/ее в другой список, который у меня есть.C# WPF Random ListBox - удалить объект из одного окна списка и добавить к другому с помощью случайного

Я получаю сообщение об ошибке в первом цикле foreach. Не знаете, как пройти через personListBox. Также необходимо перенести человека из personListBox1 в personListBox2.

Мне нужен человек, удаленный из 1-го списка, так что, когда он снова петлится, его снова не будет выбран. Я планирую сделать что-то только со вторым списком людей. Спасибо заранее, ребята.

Ниже приведена случайная кнопка, с которой я пытаюсь.

private void randomButton_Click(object sender, RoutedEventArgs e) 
    { 
     if (this.numberComboBox.SelectedIndex != -1) 
     { 
      List<Person> personList = new List<Person>();     
      int number = Convert.ToInt16(this.numberComboBox.SelectedItem); 

      // Add each person from the one list box to the other. 
      foreach (Person P in this.personListBox.Items) 
      { 
       personList.Add(P); 
      } 

      // Loop the the selected number of times to remove and add from list to list. 
      for (int i = 0; i < number; i++) 
      { 
       int randomValue = random.Next(personListBox.Items.Count);      
       // Need to remove the person from personListBox1 here 
       // Then move them to personListBox2 
      } 
     } 
     else 
     { 
      MessageBox.Show("Please select a number before trying to random."); 
     } 
    } 

ответ

1

Возможно, это?

private void randomButton_Click(object sender, RoutedEventArgs e) 
    { 
     if (this.numberComboBox.SelectedIndex != -1 && Convert.ToInt16(this.numberComboBox.SelectedItem) <= personListBox.Items.Count) 
     {    
      int number = Convert.ToInt16(this.numberComboBox.SelectedItem); 

      for (int i = 0; i < number; i++) 
      { 
       int randomValue = random.Next(personListBox.Items.Count);      
       var person = personListBox.Items[randomValue]; 
       personListBox.Items.RemoveAt(randomValue); 
       personListBox2.Items.Add(person); 
      } 
     } 
     else 
     { 
      MessageBox.Show("Please select a number before trying to random."); 
     } 
    } 

Обратите внимание, что я добавил условие для проверки того, что выбранное число не превышает количество лиц в первом списке.

+0

Это работает. Это также имеет смысл. Спасибо @SomeUser – Clint

+0

Есть ли способ сохранить элемент списка в качестве Лица? Мне нужно использовать тип Person, чтобы я мог изменять свойства Person, основанные на случайном Person? Итак, в цикле вместо var person = personListBox.Items [randomValue]; Я мог бы сделать это Person = personListBox.Items [randomValue]; – Clint

+0

Я почти уверен, что элементы в списке - это типы объектов, поэтому вам нужно отбросить элемент обратно к типу человека. Person person = (Person) personListBox.Items [randomValue]; – YuvShap

0

Проверьте это.

<Grid> 
    <StackPanel> 
     <StackPanel Orientation="Horizontal"> 
      <ListBox x:Name="ListBox1" DisplayMemberPath="Name"/> 
      <ListBox x:Name="ListBox2" DisplayMemberPath="Name"/> 
     </StackPanel> 
     <Button x:Name="Button" Content="Remove" Click="Button_OnClick"></Button> 
    </StackPanel> 

</Grid> 

public partial class Window1 : Window 
{ 
    private ObservableCollection<Person> list1; 
    private ObservableCollection<Person> list2; 

    public Window1() 
    { 
     InitializeComponent(); 
     list1 = new ObservableCollection<Person>() 
     { 
      new Person() {Name = "NAme1"}, 
      new Person() {Name = "NAme2"}, 
      new Person() {Name = "NAme3"}, 
      new Person() {Name = "NAme4"}, 
      new Person() {Name = "NAme5"}, 

     }; 

     ListBox1.ItemsSource = list1; 

     list2 = new ObservableCollection<Person>(); 
     ListBox2.ItemsSource = list2; 
    } 

    private void Button_OnClick(object sender, RoutedEventArgs e) 
    { 
     list2.Add(ListBox1.SelectedItem as Person); 
     list1.Remove(ListBox1.SelectedItem as Person); 
    } 
} 

class Person 
{ 
    public string Name { get; set; } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^