списъчно поле щракнете двукратно за добавяне и премахване

Използвам WPF и C#. Имам малък проблем с два списъка. Когато щракна двукратно върху елемент от ListBox1, той ще добави елемента към ListBox2 и след това този елемент трябва да бъде премахнат в ListBox1. Добавянето работи, но премахването не работи. Получих съобщение за грешка (вижте снимката). Някаква идея защо? Какво може да не е наред?

class Shopping
{

    private ObservableCollection<string> _fruits;

    public IEnumerable<string> GetFruits()
    {
        _fruits = new ObservableCollection<string> 
                            {
                                "Apples",
                                "Bananas",
                                "Oranges",
                                "Grapes",
                                "Coconut"
                            };

        return _fruits;
    } 

 public GroceriesList()
    {
        InitializeComponent();

        ListBox1.ItemsSource = _shopping.GetFruits();

    }

    private void ListBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (ListBox1.SelectedItem != null)
        {
            ListBox2.Items.Add(ListBox1.SelectedItem);
            ListBox1.Items.Remove(ListBox1.SelectedItem);
        }

    }

въведете описание на изображението тук


person user1358072    schedule 03.06.2013    source източник
comment
Това изглежда като c# и WPF правилно ли е? Ако е, моля, добавете тези тагове към въпроса си   -  person rene    schedule 03.06.2013
comment
съжалявам, да c# и wpf. просто го добавих в публикацията си.   -  person user1358072    schedule 03.06.2013
comment
Това ще привлече правилната аудитория... :-)   -  person rene    schedule 03.06.2013
comment
@GarryVass можеш ли да ми покажеш твоя примерен код? не знам как да го направя. Благодаря   -  person user1358072    schedule 03.06.2013
comment
@GarryVass го разбра. много благодаря :)   -  person user1358072    schedule 03.06.2013
comment
?? Добре, въведох корекцията по-долу   -  person Gayot Fow    schedule 03.06.2013


Отговори (1)


Те ви казват да добавите/премахнете от вашата променлива _fruits ЧАСТИЧНО, защото има основен CollectionViewSource. Бих свързал първия lb към списък _allFruits, а втория lb към списък _selectedFruits. Извършете подходящото добавяне/премахване към тези списъци, а не директно към lb източниците.

Ще работи нещо подобно (възможни грешки при компилиране, тъй като изрязах и поставих от вашия въпрос)...

    private ObservableCollection<string> _fruits;
    private ObservableCollection<string> _fruitsSelected;

    public IEnumerable<string> GetFruits()
    {
        _fruits = new ObservableCollection<string> 
                            {
                                "Apples",
                                "Bananas",
                                "Oranges",
                                "Grapes",
                                "Coconut"
                            };

        return _fruits;
    } 
public GroceriesList()
    {
        InitializeComponent();
        _fruitsSelected = new ObservableCollection<string>();
        ListBox1.ItemsSource = _shopping.GetFruits();
        ListBox2.ItemsSource = _fruitsSelected;

    }

  private void ListBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (ListBox1.SelectedItem != null)
        {
            _fruitsSelected.Add(ListBox1.SelectedItem);
            _fruits.Remove(ListBox1.SelectedItem);
        }
    }

Това ще спре грешката ви да се случи и ще позволи обвързването да работи по начин „wpf“. Другата разлика е, че използвате два списъка, а не един.

person Gayot Fow    schedule 03.06.2013
comment
@user1358072, радвам се да помогна. Моля, маркирайте отговора като приет, за да не се опитват хората да го решават отново. - person Gayot Fow; 03.06.2013